Как работает присвоение переменной, находящейся в хранилище?
Я читаю readthedocs солидности, и в разделе расположение данных есть этот контракт
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;
Комментарии в коде сбивают меня с толку. Есть ли четкое объяснение, как это работает?
Что я уже пробовал:
Я попытался понять их комментарии, но безуспешно...