您的位置:首页 > 其它

关键字 using ....for ...

2018-05-22 17:46 357 查看

一、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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  using 以太坊
相关文章推荐