Skip to content

Latest commit

 

History

History
75 lines (51 loc) · 2.93 KB

File metadata and controls

75 lines (51 loc) · 2.93 KB

函数类型

function <function name>(<parameter types>) {internal|external|public|private} [pure|view|payable] [returns (<return types>)]
  • 对上述函数表达式进行解释:

    • function:声明函数时的固定用法。要编写函数,就需要以 function 关键字开头。

    • <function name>:函数名。

    • (<parameter types>):圆括号内写入函数的参数,即输入到函数的变量类型和名称。

    • {internal|external|public|private}:函数可见性说明符,共有4种。

      • public:内部和外部均可见。
      • private:只能从本合约内部访问,继承的合约也不能使用。
      • external:只能从合约外部访问(但内部可以通过 this.f() 来调用,f是函数名)。
      • internal: 只能从合约内部访问,继承的合约可以用。

      注意 1:合约中定义的函数需要明确指定可见性,它们没有默认值。

      注意 2public|private|internal 也可用于修饰状态变量。public变量会自动生成同名的getter函数,用于查询数值。未标明可见性类型的状态变量,默认为internal

    • [pure|view|payable]:决定函数权限/功能的关键字。payable(可支付的)很好理解,带着它的函数,运行的时候可以给合约转入 ETH。pureview 的介绍见下一节。

    • [returns ()]:函数返回的变量类型和名称。

到底什么是pure和view

pure和view关键字可能令人费解,因為其他程式语言中没有类似的关键字。 solidity引入这连个关键字主要是因为以太坊交易需要支付气费(gas fee)。 合约的状态变数存储在链上,gas fee 很贵,如果计算不改链上的状态,就可以不用付gas。

  • pure: pure 函数既不能读取也不能写入链上的状态变数。
  • view:view 函数能读取但也不能写入链上的状态变数。

在以太坊中,以下语句被视为修改链上状态:

  • 写入状态变量。
  • 释放事件。
  • 创建其他合约。
  • 使用 selfdestruct.
  • 通过调用发送以太币。
  • 调用任何未标记 viewpure 的函数。
  • 使用低级调用(low-level calls)。
  • 使用包含某些操作码的内联汇编。

返回值:return 和 returns

  • returns:跟在函数名后面,用于声明返回的变量类型及变量名。
  • return:用于函数主体中,返回指定的变量。

命名式返回

// 命名式返回
function returnNamed() public pure returns(uint256 _number, bool _bool, uint256[3] memory _array){
    _number = 2;
    _bool = false;
    _array = [uint256(3),2,1];
}

// 命名式返回,依然支持return
function returnNamed2() public pure returns(uint256 _number, bool _bool, uint256[3] memory _array){
    return(1, true, [uint256(1),2,5]);
}

解构式赋值

  • 解构赋值用,隔开,按顺序排列,不读取的留空。
(, _bool2, ) = returnNamed();