3.5 solidity 可见性和函数
-
可见性
-
public
公开函数是合约接口的一部分,可以通过内部,或者消息来进行调用
对于public类型的状态变量,会自动创建一个访问器。
函数默认可见性是public
-
private
私有函数和状态变量仅在当前合约中可以访问,在继承的合约内,不可访问。
-
external
外部函数是合约接口的一- 部分,只能使用消息调用
(this.xxx())
(这就像是java中的成员方法,只能由对象调用,不能直接被调用,在solidity里没有对象的概念,只有消息的概念)
-
internal
函数和状态变量只能通过内部访问。如在当前合约中调用,或继承的合约里调用(类似于java中的protect)。状态变量默认的可见性是internal(状态变量就类似于java中的成员变量,属于某个对象(合约))
-
函数
-
构造函数
在合约创建的时候运行的函数,可以在里面做一些初始化的操作
contract Test{
uint internal data;
constructor(uint a) public {
data = a;
}
}
-
视图函数(constant/view)
表示不会修改状态,constant和view是等价的,在新版中推荐优先使用view。
以下几种情况会被认为是修改了状态:
- 触发了一个事件
- 修改状态变量
- 在函数里面创建了其他的合约
-
纯函数(pure)
既不会修改状态也不会读取状态变量
-
回退函数
当我们一个智能合约需要接受以太币的时候,我们就需要实现这样一个回退函数,他会被被动调用;
当我们调用了一个合约,但是没有匹配到函数的时候,就会调用回退函数。
这个回退函数可以写一些逻辑,但是尽量避免不要写复杂的逻辑。因为如果实现复杂的话,很容易引起发起交易的人由于发送的gas不够,而导致交易失败。
如果没有这个回退函数,就会报错。
并且回退函数 只能有一个。
image.png
网友评论