库类似于合约,但其目的是在一个特定地址只部署一次,且其代码由不同合约反复使用。这意味着如果调用库函数,其代码在 调用合约(calling contract)中执行,也就是说,this指向调用合约,特别是来自调用合约的storage可以被访问。由于库是源代码中独立的一部分,它只能访问 调用合约的状态变量,如果这些变量是显式的(否则无法命名这些变量)。

库没有状态变量——它们不支持继承,也不能接收以太币。库可以包含结构类型(struct)和枚举类型(enum)。

一旦在区块链中部署Solidity库,任何知道其地址和源代码(只知道原型或者知道完整实现)的人都可以使用它。Solidity编译器需要有源代码,这样能确保所欲访问的方法在库中真实存在。示例如下:

3.10 库

不能在合约源代码中添加库地址,而是需要在编译时向编译器提供库地址。

库有许多使用示例。两个主要的示例如下:

·如果有许多合约,它们有一些共同代码,则可以把共同代码部署成一个库。这将节省gas,因为gas也依赖于合约的规 模。因此,可以把库想象成使用其合约的基础合约。使用基础合约(而非库)切分共同代码不会节省gas,因为在Solidity中,继承通过复制代码工作。 由于库被当作基础合约,库里面带有内部可视性的函数被复制给使用它的合约;否则,库里面带有内部可视性的函数不能被使用这个库的合约调用,因为这需要外部 调用,而带有内部可视性的函数不能通过外部调用被调用。此外,库里的structs和enums被复制给使用这个库的合约。

·库可用于给数据类型添加成员函数。

如果一个库里只包含内部函数和/或structs/enums,则不需要部署库,因为库里面的所有内容都被复制给使用它的合约。

using for

using A for B这条指令可用于连接库函数(从库A到任意类型B)。这些函数将被调用的对象作为它们的第一个参数接收。

using A for*的结果表示来自库A的函数被连接到所有类型。示例如下:

3.10 库

3.10 库

3.10 库


来源:我是码农,转载请保留出处和链接!

本文链接:http://www.54manong.com/?id=574

'); (window.slotbydup = window.slotbydup || []).push({ id: "u3646208", container: s }); })();
'); (window.slotbydup = window.slotbydup || []).push({ id: "u3646147", container: s }); })();

相关文章:

  • 2021-10-08
  • 2021-11-23
  • 2021-05-16
  • 2021-06-18
  • 2021-08-02
  • 2021-12-15
  • 2021-05-02
猜你喜欢
  • 2021-10-12
  • 2022-02-22
  • 2021-07-05
  • 2022-12-23
  • 2022-01-02
  • 2021-04-26
  • 2021-09-29
相关资源
相似解决方案