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