值类型
函数类型
函数类型是函数的类型。函数类型的变量可以通过函数进行赋值,函数类型的参数可以用来传递函数并返回函数。
函数类型有两种类型:内部函数和外部函数。
-
内部函数只能在当前合约内调用(更具体地说,在当前代码单元内调用,这也包括内部库函数和继承函数),因为它们无法在当前合约的上下文外执行。调用内部函数的方式是跳转到它的入口标签,就像在当前合约内部调用一个函数一样。
-
外部函数包含一个地址和一个函数签名,可以通过外部函数调用传递和返回。
需要注意的是,当前合约的公共函数可以同时作为内部和外部函数使用。要将 f
作为内部函数使用,只需使用 f
,如果要将其作为外部函数使用,则使用 this.f
。
如果函数类型的变量未初始化,调用该变量会导致 Panic 错误。如果在对其使用 delete
后调用函数,也会出现相同的错误。
声明语法
函数类型的声明语法如下:
function (<参数类型>) {
internal|external} [pure|view|payable] [returns (<返回类型>)]
与参数类型不同,返回类型不能为空——如果函数类型不返回任何值,则整个 returns (<返回类型>) 部分必须省略。
默认情况下,函数类型是 internal,因此可以省略 internal 关键字。请注意,这仅适用于函数类型。对于在合约中定义的函数,必须显式指定可见性,它们没有默认值。
转换
当且仅当函数类型 A 和函数类型 B 的参数类型