Solidity - 庫



庫類似於合約,但主要用於重用。庫包含其他合約可以呼叫的函式。Solidity 對庫的使用有一些限制。以下是 Solidity 庫的關鍵特性。

  • 如果庫函式不修改狀態,則可以直接呼叫它們。這意味著只有純函式或 View 函式才能從庫外部呼叫。

  • 庫不能被銷燬,因為它被假定為無狀態的。

  • 庫不能有狀態變數。

  • 庫不能繼承任何元素。

  • 庫不能被繼承。

示例

嘗試以下程式碼來了解庫在 Solidity 中是如何工作的。

pragma solidity ^0.5.0;

library Search {
   function indexOf(uint[] storage self, uint value) public view returns (uint) {
      for (uint i = 0; i < self.length; i++) if (self[i] == value) return i;
      return uint(-1);
   }
}
contract Test {
   uint[] data;
   constructor() public {
      data.push(1);
      data.push(2);
      data.push(3);
      data.push(4);
      data.push(5);
   }
   function isValuePresent() external view returns(uint){
      uint value = 4;
      
      //search if value is present in the array using Library function
      uint index = Search.indexOf(data, value);
      return index;
   }
}

使用 Solidity 第一個應用 章節中提供的步驟執行以上程式。

注意 - 在點選部署按鈕之前,從下拉選單中選擇測試。

輸出

0: uint256: 3

使用 For

指令 using A for B; 可用於將庫 A 的庫函式附加到給定的型別 B。這些函式將使用呼叫方型別作為其第一個引數(使用 self 標識)。

示例

嘗試以下程式碼來了解庫在 Solidity 中是如何工作的。

pragma solidity ^0.5.0;

library Search {
   function indexOf(uint[] storage self, uint value) public view returns (uint) {
      for (uint i = 0; i < self.length; i++)if (self[i] == value) return i;
      return uint(-1);
   }
}
contract Test {
   using Search for uint[];
   uint[] data;
   constructor() public {
      data.push(1);
      data.push(2);
      data.push(3);
      data.push(4);
      data.push(5);
   }
   function isValuePresent() external view returns(uint){
      uint value = 4;      
      
      //Now data is representing the Library
      uint index = data.indexOf(value);
      return index;
   }
}

使用 Solidity 第一個應用 章節中提供的步驟執行以上程式。

注意 - 在點選部署按鈕之前,從下拉選單中選擇測試。

輸出

0: uint256: 3
廣告

© . All rights reserved.