3.5 solidity 可见性和函数

作者: 9c0ddf06559c | 来源:发表于2018-09-26 19:41 被阅读5次

    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

    相关文章

      网友评论

        本文标题:3.5 solidity 可见性和函数

        本文链接:https://www.haomeiwen.com/subject/fpmjoftx.html