Solidność - Biblioteki

Biblioteki są podobne do kontraktów, ale są przeznaczone głównie do ponownego wykorzystania. Biblioteka zawiera funkcje, które mogą wywoływać inne umowy. Solidność ma pewne ograniczenia dotyczące korzystania z biblioteki. Poniżej przedstawiono kluczowe cechy Solidity Library.

  • Funkcje biblioteczne można wywołać bezpośrednio, jeśli nie modyfikują stanu. Oznacza to, że funkcje czyste lub widoku można wywoływać tylko spoza biblioteki.

  • Biblioteki nie można zniszczyć, ponieważ przyjmuje się, że jest bezpaństwowcem.

  • Biblioteka nie może mieć zmiennych stanu.

  • Biblioteka nie może dziedziczyć żadnego elementu.

  • Biblioteki nie można dziedziczyć.

Przykład

Wypróbuj poniższy kod, aby zrozumieć, jak działa biblioteka w 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;
   }
}

Uruchom powyższy program, wykonując kroki opisane w rozdziale Solidity First Application .

Note - Wybierz opcję Test z listy rozwijanej przed kliknięciem przycisku wdrażania.

Wynik

0: uint256: 3

Korzystanie dla

Dyrektywa using A for B; można użyć do dołączenia funkcji bibliotecznych biblioteki A do danego typu B. Funkcje te będą używały typu wywołującego jako pierwszego parametru (identyfikowanego za pomocą self).

Przykład

Wypróbuj poniższy kod, aby zrozumieć, jak działa biblioteka w 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;
   }
}

Uruchom powyższy program, wykonując kroki opisane w rozdziale Solidity First Application .

Note - Wybierz opcję Test z listy rozwijanej przed kliknięciem przycisku wdrażania.

Wynik

0: uint256: 3