Solidität - Bibliotheken
Bibliotheken ähneln Verträgen, sind jedoch hauptsächlich für die Wiederverwendung vorgesehen. Eine Bibliothek enthält Funktionen, die andere Verträge aufrufen können. Solidity hat bestimmte Einschränkungen bei der Nutzung einer Bibliothek. Im Folgenden sind die wichtigsten Merkmale einer Solidity Library aufgeführt.
Bibliotheksfunktionen können direkt aufgerufen werden, wenn sie den Status nicht ändern. Das bedeutet, dass reine oder Ansichtsfunktionen nur von außerhalb der Bibliothek aufgerufen werden können.
Die Bibliothek kann nicht zerstört werden, da davon ausgegangen wird, dass sie zustandslos ist.
Eine Bibliothek kann keine Statusvariablen haben.
Eine Bibliothek kann kein Element erben.
Eine Bibliothek kann nicht vererbt werden.
Beispiel
Versuchen Sie den folgenden Code, um zu verstehen, wie eine Bibliothek in Solidity funktioniert.
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;
}
}
Führen Sie das obige Programm mit den im Kapitel Solidity First Application beschriebenen Schritten aus .
Note - Wählen Sie Test aus der Dropdown-Liste, bevor Sie auf die Schaltfläche Bereitstellen klicken.
Ausgabe
0: uint256: 3
Verwenden von For
Die Richtlinie using A for B; kann verwendet werden, um Bibliotheksfunktionen der Bibliothek A an einen bestimmten Typ B anzuhängen. Diese Funktionen verwenden den Aufrufertyp als ersten Parameter (identifiziert mit self).
Beispiel
Versuchen Sie den folgenden Code, um zu verstehen, wie eine Bibliothek in Solidity funktioniert.
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;
}
}
Führen Sie das obige Programm mit den im Kapitel Solidity First Application beschriebenen Schritten aus .
Note - Wählen Sie Test aus der Dropdown-Liste, bevor Sie auf die Schaltfläche Bereitstellen klicken.
Ausgabe
0: uint256: 3