مشخصات مقاله
-
0.0
-
793
-
0
-
0
کتابخانه ها در سالیدیتی
کتابخانه ها مشابه قراردادها می باشند اما عمدتا برای استفاده مجدد به کار می روند. کتابخانه شامل توابعی است که سایر قراردادها می توانند از آنها استفاده کنند. Solidity محدودیت های خاصی در استفاده از کتابخانه دارد. در ادامه مشخصات اصلی کتابخانه Solidity آورده شده است.
- توابع کتابخانه می توانند مستقیما فراخوانی شوند، اگر آنها State را تغییر ندهند. این بدان معناست که توابه Pure یا View از خارج کتابخانه قابل فراخوانی هستند.
- از انجا که فرض می شود کتابخانه بدون State نیست، نمی تواند از بین برود.
- یک کتابخانه نمی تواند متغیرهای State داشته باشد.
- یک کتابخانه نمی تواند هیچ عنصری را به ارث برساند.
- کتابخانه را نمی توان به ارث برد.
کد زیر را امتحان کنید تا نحوه کار کتابخانه در 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;
}
}
استفاده از For
این دستورالعمل با استفاده از A برای B، می تواند برای پیوستن توابع کتابخانه A به یک نوع داده شده B استفاده شود. این توابع از نوع تماس گیرنده به عنوان اولین مورد استفاده می شود.
می توانید با اجرای کد زیر نحوه کار کتابخانه در 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;
}
}