Solidity - Thư viện

Thư viện tương tự như Hợp đồng nhưng chủ yếu nhằm mục đích tái sử dụng. Thư viện chứa các hàm mà các hợp đồng khác có thể gọi. Solidity có những hạn chế nhất định đối với việc sử dụng Thư viện. Sau đây là các đặc điểm chính của Thư viện Solidity.

  • Các chức năng thư viện có thể được gọi trực tiếp nếu chúng không sửa đổi trạng thái. Điều đó có nghĩa là các hàm thuần túy hoặc chỉ xem có thể được gọi từ bên ngoài thư viện.

  • Thư viện không thể bị phá hủy vì nó được cho là không có trạng thái.

  • Thư viện không thể có các biến trạng thái.

  • Thư viện không thể kế thừa bất kỳ phần tử nào.

  • Thư viện không thể được kế thừa.

Thí dụ

Hãy thử đoạn mã sau để hiểu cách hoạt động của Thư viện trong 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;
   }
}

Chạy chương trình trên bằng các bước được cung cấp trong chương Ứng dụng đầu tiên của Solidity .

Note - Chọn Kiểm tra từ trình đơn thả xuống trước khi nhấp vào nút triển khai.

Đầu ra

0: uint256: 3

Sử dụng cho

Chỉ thị using A for B; có thể được sử dụng để đính kèm các hàm thư viện của thư viện A với một kiểu nhất định B. Các hàm này sẽ sử dụng kiểu trình gọi làm tham số đầu tiên của chúng (được xác định bằng cách sử dụng self).

Thí dụ

Hãy thử đoạn mã sau để hiểu cách hoạt động của Thư viện trong 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;
   }
}

Chạy chương trình trên bằng các bước được cung cấp trong chương Ứng dụng đầu tiên của Solidity .

Note - Chọn Kiểm tra từ trình đơn thả xuống trước khi nhấp vào nút triển khai.

Đầu ra

0: uint256: 3