متغیر ها به یکی از صورت های storage ،memory یا calldata تعریف می شوند تا به صراحت مکان نگه داریشان(Data Location) مشخص شود.
storage – متغیر از نوع متغیر های وضعیت (state variable) است. (در بلاکچین ذخیره می شوند)
memory – متغیر در حافظه قرار دارد و تا زمانی که تابع خوانده شده وجود خواهد داشت.
calldata – مکانی خاص که شامل آرگومان های توابع است.
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;
contract DataLocations {
uint[] public arr;
mapping(uint => address) map;
struct MyStruct {
uint foo;
}
mapping(uint => MyStruct) myStructs;
function f() public {
//با متغیر های وضعیت _fصدا زدن
_f(arr, map, myStructs[1]);
// دریافت ساختار از نگاشت
MyStruct storage myStruct = myStructs[1];
// ساخت یک ساختار در مموری
MyStruct memory myMemStruct = MyStruct(0);
}
function _f(
uint[] storage _arr,
mapping(uint => address) storage _map,
MyStruct storage _myStruct
) internal {
//انجام می شودmemoryکارهایی که با متغیرهای
}
// امکان مقدار برگشتی از نوع مموری نیز وجود دارد
function g(uint[] memory _arr) public returns (uint[] memory) {
// انجام می شود memory کارهایی که با آرایه
}
function h(uint[] calldata _arr) external {
// انجام می شود calldata کارهایی که با آرایه
}
}
Solidity