库合约是一种特殊的合约,为了提升Solidity
代码的复用性和减少gas
而存在。库合约是一系列的函数合集,由大神或者项目方创作,咱们站在巨人的肩膀上,会用就行了。
他和普通合约主要有以下几点不同:
- 不能存在状态变量
- 不能够继承或被继承
- 不能接收以太币
- 不可以被销毁
需要注意的是,库合约重的函数可见性如果被设置为public
或者external
,则在调用函数时会触发一次delegatecall
。而如果被设置为internal
,则不会引起。对于设置为private
可见性的函数来说,其仅能在库合约中可见,在其他合约中不可用。
如何使用库合约
我们用Strings
库合约的toHexString()
来演示两种使用库合约中函数的办法。
-
利用using for指令
指令
using A for B;
可用于附加库合约(从库 A)到任何类型(B)。添加完指令后,库A
中的函数会自动添加为B
类型变量的成员,可以直接调用。注意:在调用的时候,这个变量会被当作第一个参// 利用using for指令
// 利用using for指令
using Strings for uint256;
function getString1(uint256 _number) public pure returns(string memory){
// 库合约中的函数会自动添加为uint256型变量的成员
return _number.toHexString();
}
2.通过库合约名称调用函数
// 直接通过库合约名调用
function getString2(uint256 _number) public pure returns(string memory){
return Strings.toHexString(_number);
}