Member 13673235 Ответов: 0

Как работает присвоение переменной, находящейся в хранилище?


Я читаю 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;

Комментарии в коде сбивают меня с толку. Есть ли четкое объяснение, как это работает?

Что я уже пробовал:

Я попытался понять их комментарии, но безуспешно...

0 Ответов