Solidity-라이브러리
라이브러리는 계약과 유사하지만 주로 재사용을 목적으로합니다. 라이브러리에는 다른 계약에서 호출 할 수있는 함수가 포함되어 있습니다. Solidity에는 라이브러리 사용에 대한 특정 제한이 있습니다. 다음은 Solidity Library의 주요 특징입니다.
라이브러리 함수는 상태를 수정하지 않으면 직접 호출 할 수 있습니다. 즉, pure 또는 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 First Application 장에 제공된 단계를 사용하여 위 프로그램을 실행하십시오 .
Note − 배포 버튼을 클릭하기 전에 드롭 다운에서 테스트를 선택합니다.
산출
0: uint256: 3
사용
지침 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 First Application 장에 제공된 단계를 사용하여 위 프로그램을 실행하십시오 .
Note − 배포 버튼을 클릭하기 전에 드롭 다운에서 테스트를 선택합니다.
산출
0: uint256: 3