美文网首页
Solidity中view和pure的使用区别

Solidity中view和pure的使用区别

作者: cc卡耐基 | 来源:发表于2024-01-03 12:37 被阅读0次

智能合约中我们提到的状态变量,可以认为是一个类中的变量(开发同学容易理解)

// file Storage.sol
contract Storage {
    // 状态变量
    uint256 public number;

    function test(uint256 a) public virtual returns (uint256) {
        return a;
    }
}

// file StorageFactory.sol
import "./Storage.sol"
contract StorageFactory is Storage  {
    // 这里会有一个warning error提示:
    //Warning: Function state mutability can be restricted to pure ......
    function test(uint256 a) public override returns (uint256) {
        return a + 10;
    }
}

这里的warning提示大致的意思是,如果没有使用到本合约或者父合约的状态变量,需要添加pure修饰符, 像如下:

function test(uint256 a) public pure override returns (uint256) {
    return a + 10;
}

当然,如果函数内是这种写法,引用了状态变量,但不是修改其值

// 这里依然会有一个warning error提示:
// Warning: Function state mutability can be restricted to view ....
function test(uint256 a) public override returns (uint256) {
        // 这里的number就是父类中的状态变量number
        return number + a;
}

这里的提示是表示如果你引用了本合约或者父合约的状态变量,需要添加view修饰符,想如下

function test(uint256 a) public view override returns (uint256) {
        // 这里的number就是父类中的状态变量number
        return number + a;
}

pure和view修饰符是用来限制合约状态变量使用的,如果不加修饰符,是会有警告提示,但是不影响编译后的执行的。以上的例子其实不局限于继承关系,常规的单合约也有这个限制。

相关文章

网友评论

      本文标题:Solidity中view和pure的使用区别

      本文链接:https://www.haomeiwen.com/subject/hxomndtx.html