1703876725
区块链项目开发指南 3.9.2 函数修改器
1703876726
1703876727
我们之前看到了函数修改器(function modifier)的概念,还编写了一个基本的函数修改器,现在来深入学习修改器。
1703876728
1703876729
修改器由子合约(child contract)继承,且子合约可以对其重写。可以通过用空格分隔的列表指定修改器将多个修改器应用到一个函数,并将多个修改器按顺序估值;还可以向修改器传送实参。
1703876730
1703876731
在修改器中,无论下一个修改器体或者函数体二者哪个先到达,会被插入到“_”;出现的地方。
1703876732
1703876733
让我们来看一个函数修改器的复杂代码例子:
1703876734
1703876735
1703876736
1703876737
1703876738
1703876739
1703876740
1703876741
myFunction()的执行代码如下:
1703876742
1703876743
1703876744
1703876745
1703876746
在上述代码中调用myFunction()方法时,将返回0。但是之后访问状态变量a时,将得到8。
1703876747
1703876748
修改器或者函数体中的return(返回)立即离开整个函数,返回值被分配成它需要成为的任何变量。
1703876749
1703876750
就函数来说,return之后的代码在调用者的代码完成运行后再执行。就修改器来说,上述修改器中的“_;”之后的代码在调用者的代码完成运行后再执行。在上面的例子中,第5、6和7行从未执行过。在第4行之后,执行从第8~10行开始。
1703876751
1703876752
修改器中的return不可以有相关值,它总是返回全0。
1703876753
1703876754
1703876755
1703876756
1703876758
区块链项目开发指南 3.9.3 回退函数
1703876759
1703876760
一个合约可以有唯一的未命名函数,称为回退函数(fallback function)。该函数不能有实参,不能返回任何值。如果其他函数都不能匹配给定的函数标识符,就在合约调用上执行回退函数。
1703876761
1703876762
当合约不用任何函数调用就接收以太币(即交易发送以太币给合约却不调用任何方法)时,也执行该函数。在此情况下,用于函数调用的gas通常很少(准确地说是2300 gas),所以使回退函数尽可能便宜很重要。
1703876763
1703876764
接收以太币但是却不定义回退函数的合约会抛出异常,把以太币发送回去。所以如果你想让你的合约接收以太币,就必须要实现回退函数。
1703876765
1703876766
下面给出了回退函数的一个示例:
1703876767
1703876768
1703876769
1703876770
1703876771
1703876772
1703876773
[
上一页 ]
[ :1.703876724e+09 ]
[
下一页 ]