Skip to content

Latest commit

 

History

History
65 lines (50 loc) · 2.01 KB

File metadata and controls

65 lines (50 loc) · 2.01 KB

101-03 函数

solidity中函数的形式如下:
function () {internal|external|public|private} [pure|view|payable] [returns ()]

  1. fuction:声明函数
  2. function name:函数名
  3. parameter types:(变量类型 名称)
  4. {internal|external|public|private}:函数可见型说明符
    • internal:只能合约内部访问,继承合约可用
    • external:只能合约外部访问(内部可通过this.FunctionName()调用)
    • public:全部可见
    • private:合约内部访问,继承不可用
      [合约中定义的函数要有明确指向性,无默认值]
contract FuncType1 {
    uint256 public num = 5;
    function add() external {
        num = num +1;
    }//add运行时num被写入了

    function addPure(uint256 _Num) external pure returns(uint256 _NewNum){
        _NewNum = _Num + 1;
    }//被标记为pure的addPure()函数无法写入,只能根据输入return一个值

    function addView() external view returns (uint256 _num1){
        _num1 = num + 1;
    }//被标记为view的函数可以读取链上状态,可以读取到add()函数中的num
}
  1. [pure|view|payable] :函数权限关键字

pure,view,payable

payable:可支付,能为合约支付eth
pure:既不能读取也不能写入链上状态
view:能读取但不能写入链上状态

非pure和view函数既可读取也可写入状态变量

contract FuncType2 {
    uint256 public num = 10;
    //internal:内部函数
    function minus() internal {
        num = num - 1;
    }
    //合约内的函数可以调用内部函数
    function minusCall() external {
        minus();
    }//此external函数使得上面的minus()函数可以从合约外部被调用


    function minusPayable() external payable returns(uint256 balance){
        minus();
        balance = address(this).balance;
    }//payable函数通过当前地址向合约转入eth,并调用了minus()函数
    //非pure view函数都是既可以读取也可以写入
}