23-02-22
Last Update:
23-02-22
方法的顺序
function name(参数列表) 可见性 修饰符 returns(返回类型 返回值名称)
除了 Solidity 0.5.0 版本之前可见性和返回参数的位置可以交换外,从 Solidity 0.5.0 版本开始,函数声明必须按照以下顺序:
1 | function functionName(parameterList) visibilityModifier stateMutabilityModifier virtualModifier overrideModifier returns (returnTypes) |
这些部分应该按照以下顺序进行:
- 函数名称
- 参数列表
- 可见性修饰符(public、external、internal 或 private)
- 状态变更修饰符(pure、view、payable 或不包含修饰符)
- 虚拟修饰符(virtual 或不包含修饰符)
- 覆盖修饰符(override 或不包含修饰符)
- 返回值列表
全局变量
函数可见性(大)与变量作用域(小)修饰符
函数可见性指的的范围会比较大,而变量作用域指的东西少一些(external不在变量作用域范畴,不能作用于变量)
public
Public – 公共状态变量可以在内部访问,也可以通过消息访问。对于公共状态变量,将生成一个自动getter函数。
internal
Internal – 内部状态变量只能从当前合约或其派生合约内访问。
private
Private – 私有状态变量只能从当前合约内部访问,派生合约 内不能访问。
external
修饰为External的函数 — 只能通过三种种方式:一—是通过继承/合同内其他函数的this进行调用/二是this(==合约地址调用外部函数)/三是通过交易发送
this.foo()
在 Solidity 中确实也是 external 的调用方式,因为 this 关键字指的是当前合约的地址,通过它来调用合约中的函数等价于通过外部地址调用合约中的函数。
合同状态
在 Solidity 中,合约的状态(State)是指合约在任意时刻所有的状态变量的集合。这些状态变量可以是各种类型的变量,包括 uint、address、bool、mapping 等。
状态变更修饰符
状态变更修饰符包括 pure、view 和 payable 三种:
view 修饰符表示函数不会修改合约状态,只读取合约状态变量的值。因此,view 函数在调用过程中不会消耗 gas,可以免费调用,即使在未来的某个时候也可以免费调用。
pure 修饰符表示函数不会读取或修改合约状态,只执行计算并返回结果。因此,pure 函数在调用过程中不会消耗 gas,可以免费调用,即使在未来的某个时候也可以免费调用。
payable 修饰符表示函数可以接收以太币,并且会修改合约状态。在调用 payable 函数时,调用者必须发送足够的以太币来支付函数执行所需的 gas 费用和转账金额。因此,payable 函数在调用过程中会消耗 gas,调用者需要支付 gas 费用,而且调用者发送的以太币会被转移到合约地址。