Я читаю readthedocs Solidity, и в разделе Расположение данных есть этот контракт
pragma solidity >=0.4.0 <0.6.0;
contract C {
uint[] x; // the data location of x is storage
// the data location of memoryArray is memory
function f(uint[] memory memoryArray) public {
x = memoryArray; // works, copies the whole array to storage
uint[] storage y = x; // works, assigns a pointer, data location of y is storage
y[7]; // fine, returns the 8th element
y.length = 2; // fine, modifies x through y
delete x; // fine, clears the array, also modifies y
// The following does not work; it would need to create a new temporary /
// unnamed array in storage, but storage is "statically" allocated:
// y = memoryArray;
// This does not work either, since it would "reset" the pointer, but there
// is no sensible location it could point to.
// delete y;
g(x); // calls g, handing over a reference to x
h(x); // calls h and creates an independent, temporary copy in memory
}
function g(uint[] storage) internal pure {}
function h(uint[] memory) public pure {}
}
В строке
uint[] storage y = x;
Я бы подумал, что y
этоточно такой же тип, как x
и, следовательно, ведет себя точно так же, как x, но это не тот случай, как показано в строке
y = memoryArray;
Комментарии в коде сбивают меня с толку.Есть ли четкое объяснение того, как это работает?