一、using 用于在合约中给某个类型增加 library的方法 。
例子如下:
pragma solidity ^0.4.21;
//https://medium.com/@gus_tavo_guim/soliditys-using-keyword-c05c18aaa088
library SomeLibrary {
function add(uint self, uint b) public pure returns (uint) {
return self+b;
}
}
contract SomeContract {
using SomeLibrary for uint;
function add3(uint number) public pure returns (uint) {
return number.add(3); //调用SomeLibrary的add方法,并且第一个参数就是number
}
}
上面例子中using SomeLibrary for uint; 表示在unit类型中引入SomeLibrary的方法。并且当unit类型的值调用SomeLibrary的方法时,第一个参数就行unit本身。例如:
number.add(3); 这里就是调用SomeLibrary的add方法,并且第一个参数就是number。
输入13后,调用结果如下:
不适用using的时候,上面代码写法如下:
pragma solidity ^0.4.15;
library SomeLibrary {
function add(uint self, uint b) returns (uint) {
return self+b;
}
}
contract SomeContract {
function add3(uint number) returns (uint) {
return SomeLibrary.add(number, 3);
}
}
二、using 后面跟星号(*)。
合约中的所有 类型都可以使用对应SomeLibrary 的方法。
例子如下:
pragma solidity ^0.4.15;
library SomeOtherLibrary {
function add(uint self, uint b) returns (uint) {
return self+b;
}
function checkCondition(bool value) returns (bool) {
return value;
}
}
contract SomeContract {
using SomeOtherLibrary for *;
function add3(uint number) returns (uint) {
return number.add(3);
}
function checkForTruthy(bool checker) returns (bool) {
return checker.checkCondition();
}
}
上面的例子中,uint类型、bool 类型的实例都可以调用SomeOtherLibrary 的方法,并且把自己作为第一个参数传递进方法中。
实际上整个合约中的任何类型都含有SomeOtherLibrary 的方法。
本文转自:https://medium.com/@gus_tavo_guim/soliditys-using-keyword-c05c18aaa088