Solidity 定义的函数的属性默认为public
。 这就意味着任何一方 (或其它合约) 都可以调用你合约里的函数。
显然,不是什么时候都需要这样,而且这样的合约易于受到攻击。 所以将自己的函数定义为private
是一个好的编程习惯,只有当你需要外部世界调用它时才将它设置为public。
定义private函数:
uint[] numbers;
function _addToArray(uint _number) private {
numbers.push(_number);
}
在函数名字后面使用关键字 private
即可。私有函数的名字用(_
)起始。
除 public
和 private
属性之外,Solidity 还使用了另外两个描述函数可见性的修饰词:internal
和 external
。
internal
和 private
类似,不过, 如果某个合约继承自其父合约,这个合约即可以访问父合约中定义的“internal
”函数。
external
与public
类似,只不过这些函数只能在合约之外调用 - 它们不能被合约内的其他函数调用。
声明函数 internal
或 external
类型的语法,与声明 private
和 public
类 型相同:
uint private appleEaten= 0;
function eat() internal {
appleEaten++;
}
总结:private
意味着它只能被合约内部调用; internal
就像 private
但是也能被继承的合约调用; external
只能从合约外部调用;最后 public
可以在任何地方调用,不管是内部还是外部。