关键字 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后,调用结果如下:

173653_bAVW_2601303.png

不适用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

 

转载于:https://my.oschina.net/kunBlog/blog/1816837

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值