Solidity
library-using-for 和 contract-is 之間的區別
我正在使用兩種不同的方法來獲得相同的結果,並想知道真正的區別是什麼。兩個選項(
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,因此它不是您的契約方法,不能從外部呼叫。