原文:http://solidity.readthedocs.io/en/develop/types.html#function-types
函数类型
函数类型是函数的类型。函数类型可以被赋值,作为参数和返回结果,函数可分为Internal
和external
函数。
内部函数(Internal)
在当前合约内被调用,可允许继承。
外部函数(External)
由地址和方法签名组成。可作为参数传给外部函数调用,或由函数调用返回。
完整的函数的定义如下:
function (<parameter types>) {internal(默认)|external} [constant] [payable] [returns (<return types>)]
函数类型的一些特点:
如果函数不需返回内容,则需去除returns
关键字
默认的函数类型是internal
的。
pragma solidity ^0.4.0;
contract Test{
//default internal
function noParameter() returns (uint){}
//nothing to return
function noReturn1(uint x) {}
//if no return,must remove returns keywords
//function noReturn2(uint x) returns {}
}
调用上的特点:
this.
是调用的external
的方法。直接调用的话是通过内部调用。
pragma solidity ^0.4.5;
contract Test{
function internalFunc() internal{}
function externalFunc() external{}
function callFunc(){
//call from inner
internalFunc();
//can't call from internal
//externalFunc();
//can't call from external
//this.internalFunc();
this.externalFunc();
}
}
备注:
如果函数未初始化,调用会引发异常;删除一个函数后,调用它也会触发一个异常。
如果在外部调用external
的函数,函数会被打包成一个紧跟在地址后的bytes24
的内容。