solidity笔记 using for 的用法,以及库的讲解

简单的例子

using A for B
  • 可用于在合约的上下文中,将库函数(来自库A)附加到任何类型(B)

详细的例子

pragma solidity ^0.8.0;
   library SafeMath {
   function add(uint x, uint y) internal pure returns (uint) {
     uint z = x + y;
     require(z >= x, "uint overflow");
     return z; 
   }
 }
    contract TestLib {
      using SafeMath for uint;
      function testAdd(uint x, uint y) public pure returns (uint) {
      return x.add(y);
    } 

 }

解释一下 为什么库方法中add有两个参数,在类型中使用的时候 只转了一个参数y

因为 :

       这些函数将接收被调用的对象作为它们的第一个参数

另外可以注意下面几点 :

  • using SafeMath for *——库SafeMath的功能可以附加到任何类型。
     
  • 附加库中的所有函数,即使那些第一个参数的类型与对象的类型不匹配的函数也是如此。
  • 在调用函数时检查类型,并执行函数重载解析。
  • 指令仅在当前合约内(包括其所有功能内)有效,并且在使用该合约的合约外无效

与合约相比,库的限制:

  • 没有状态变量
  • 不能够继承或被继承
  • 不能接收以太币
  • 不可以被销毁 destroyed

猜你喜欢

转载自blog.csdn.net/bareape/article/details/123476198