简单的例子
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