美文网首页
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