3.5 solidity 可见性和函数

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


image.png
         
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:51
帖子:12
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP