Solidity中memory在0.5和0.4不同版本的区别

Solidity中memory在0.5和0.4不同版本用法有些区别, 0.5的string变量需要在传值的时候加上memory

以下是0.4版本代码:

pragma solidity ^0.4.4;
contract a1 {
    string _name;
    function a1(string name) {
        _name = name;
    }
    function f() {
        setName(_name);
    }
    //memory是值传递,不会改变原来的值。
    //这里引用类型也可以换成storage。当使用storage时方法必须是private或internal
    function setName(string memory name) private{
        bytes(name)[0] = 'x';
    }
    function name() constant returns(string){
        return _name;
    }
}

以下是0.5版本代码:

注意:string 后面必须加上memory,否则会直接报错,0.4版本可以不加

pragma solidity ^0.5.1;
contract a1 {
    string _name;
    constructor (string memory name) public {
        _name = name;
    }
    function f() public {
        setName(_name);
    }
    //memory是值传递,不会改变原来的值。
    //这里引用类型也可以换成storage。当使用storage时方法必须是private或internal
    function setName(string storage name) private{
        bytes(name)[0] = 'x';
    }
    function name() public view returns(string memory){
        return _name;
    }
}

你可能感兴趣的:(Solidity)