【Solidity】view与pure方法修饰符的应用
在 Solidity 中 constant、view、pure 三个函数修饰词的作用是告诉编译器,函数不改变 / 不读取状态变量,这样函数执行就可以不消耗 gas 了(是完全不消耗!),因为不需要矿工来验证,所以用好这几个关键词对省 gas 很重要。
- constant: 常量,不可更改
- view: 可读取但不可更改合约中的状态变量
- pure: 不可读取且不可更改合约中的状态变量
据说,在 Solidity v4.17 之前,只有 constant,后来有人嫌 constant 这个词本身代表变量中的常量,不适合用来修饰函数,所以将 constant 拆成了 view 和 pure。view 的作用和 constant 一模一样,可以读取状态变量但是不能改;pure 则更为严格,pure 修饰的函数不能改也不能读状态变量,否则编译通不过。
pragma solidity ^0.8.7; contract constantViewPure{ string name; uint public age; function constantViewPure() public{ name = "liushiming"; age = 29; } function getAgeByConstant() public constant returns(uint){ age += 1; // 声明为 constant,在函数体中又试图去改变状态变量的值,编译会报 warning, 但是可以通过 return age; // return 30, 但是,状态变量 age 的值不会改变,仍然为29! } function getAgeByView() public view returns(uint){ age += 1; // view 和 constant 效果一致,编译会报 warning,但是可以通过 return age; // return 30,但是,状态变量 age 的值不会改变,仍然为 29 } function getAgeByPure() public pure returns(uint){ return age; // 编译报错,pure 比 constant 和 view 都要严格,pure 完全禁止读写状态变量! return 1; } }
Facebook评论