智能合约语言 Solidity 教程系列3 - 函数类型

作者: ff045813a1c3 | 来源:发表于2018-01-24 11:21 被阅读49次

    汇新云】为大家定期更新文章,【汇新云】IT人的产业链平台


    Solidity 教程系列第三篇 - Solidity 函数类型介绍。

    写在前面

    Solidity 是以太坊智能合约编程语言,阅读本文前,你应该对以太坊、智能合约有所了解,如果你还不了解,建议你先看以太坊是什么

    本文前半部分是参考Solidity 官方文档(当前最新版本:0.4.20)进行翻译,后半部分函数可见性( public, external, internal, privite )深度分析(仅针对专栏订阅用户)。

    函数类型(Function Types)

    函数也是一种类型,且属于值类型。

    可以将一个函数赋值给一个函数类型的变量。还可以将一个函数作为参数进行传递。也可以在函数调用中返回一个函数。

    函数类型有两类:内部(internal)和外部(external)函数

    内部(internal)函数只能在当前合约内被调用(在当前的代码块内,包括内部库函数,和继承的函数中)。

    外部(external)函数由地址和函数方法签名两部分组成,可作为外部函数调用的参数,或返回值。

    函数类型定义如下:

    如果函数不需要返回,则省去returns ()

    函数类型默认是internal, 因此internal可以省去。但以此相反,合约中函数本身默认是public的, 仅仅是当作类型名使用时默认是internal的。

    有两个方式访问函数,一种是直接用函数名f, 一种是this.f, 前者用于内部函数,后者用于外部函数。

    如果一个函数变量没有初始化,直接调用它将会产生异常。如果delete了一个函数后调用,也会发生同样的异常。

    如果外部函数类型在Solidity的上下文环境以外的地方使用,他们会被视为function类型。它会编码为20字节的函数所在地址,和在它之前的4字节的函数方法签名一起作为bytes24类型。

    合约中的public的函数,可以使用internal和external两种方式来调用。

    internal访问形式为f, external访问形式为this.f

    成员: 属性 selector

    public (或 external) 函数有一个特殊的成员selector, 它对应一个ABI 函数选择器。

    下面的代码显示内部(internal)函数类型的使用:

    下面的代码显示外部(external)函数类型的使用:

    函数可见性分析

    public - 任意访问

    private - 仅当前合约内

    internal - 仅当前合约及所继承的合约

    external - 仅外部访问(在内部也只能用外部访问方式访问)

    public 还是 external 最佳实践

    请订阅区块链技术查看。

    参考文档

    Solidity官方文档-类型


    学好区块链,拥抱新未来:

    区块链产品经理(点击入驻),和圈内人士混个脸熟

    相关文章

      网友评论

        本文标题:智能合约语言 Solidity 教程系列3 - 函数类型

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