Solidity

library-using-for 和 contract-is 之間的區別

  • February 26, 2018

我正在使用兩種不同的方法來獲得相同的結果,並想知道真正的區別是什麼。兩個選項(library,和using, )都只提供來自文件的擴展程式碼。for``contract``is

方法一

庫.sol:

pragma solidity ^0.4.19;

contract IntExtended {

   function increment(uint _self) returns (uint) {
       return _self+1;
   }
}

contract_is_method.sol:

pragma solidity ^0.4.19;

import "browser/library.sol";

contract TestLibrary is IntExtended {

   function testIncrement(uint _base) returns (uint) {
       return IntExtended.increment(_base);
   }       
}

方法二

庫.sol:

pragma solidity ^0.4.19;

library IntExtended {

   function increment(uint _self) returns (uint) {
       return _self+1;
   }
}

using_for_method.sol:

pragma solidity ^0.4.19;

import "library.sol";

contract TestLibrary {
   using IntExtended for uint;

   function testIncrement(uint _base) returns (uint) {
       return IntExtended.increment(_base);
   }
}

在第一個實例中,您的合約繼承自 TestLibrary 合約,因此您可以使用increment(_base)or執行操作super.increment(_base)。此外,如果該函式是公開的(預設情況下是公開的),那麼該函式在部署時可以在您的合約上查看和使用。

在第二個實例中,您將庫應用到 uint 類型。這允許您通過呼叫來執行您的操作_base.increment()。請注意,您不需要將數字作為此類函式的第一個參數提供,因為它將預設為您正在呼叫該方法的對象。此外,由於該庫應用於您的 uint,因此它不是您的契約方法,不能從外部呼叫。

引用自:https://ethereum.stackexchange.com/questions/40938