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

一、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

猜你喜欢

转载自my.oschina.net/u/2601303/blog/1816837