Содержание

Операторы для переменных в Solidity

Если a — это переменная или нечто, что может быть присвоено (LValue), то для нее доступны следующие операторы:

a += e — это эквивалент a = a + e. Операторы -=, *=, /=, %=, |=, &= и ^= используются подобным образом. a++ и a– эквиваленты a+=1 и a-=1, но само выражение все еще имеет предыдущее значение. В отличие от этого, –a и ++a возвращает значение после изменения.

delete

delete a присваивает начальное значение переменной a. То есть для целых чисел это эквивалент выражению a = 0. Но оператор может также использоваться для массивов, где он присваивает динамическому массиву нулевую длину, а статическому — ту же длину со сбросом всех элементов. Для структур он присваивает структуру со сбросом всех членов.

delete не оказывает эффекта на целый mapping (так как ключи mapping могут быть произвольными и в основном известны). Так, если применить delete к структуре, то сбросятся все члены, которые не mapping, а также рекурсия членов, которые не mapping. Однако, отдельные ключи, и их соответствия могут быть удалены.

Важно знать, что delete a ведет себя, как  присвоение а, то есть в a сохраняется новый объект.

pragma solidity ^0.4.0;

contract DeleteExample {
    uint data;
    uint[] dataArray;

    function f() public {
        uint x = data;
        delete x; // устанавливает x = 0, не оказывает эффекта на data
        delete data; // устанавливает data = 0, не оказывает эффекта на x
        uint[] storage y = dataArray;
        delete dataArray; // устанавливает dataArray.length = 0, но так как uint[]
        // это сложный объект, то также затрагивается и y.
        // С другой стороны: «delete y» недопустим, поскольку присвоения локальным переменным,
        // ссылающимся на объекты хранения, могут быть сделаны только из существующих объектов хранения.
    }
}
Материал был полезен? Поделитесь в соц. сетях:
Логотип echain.ru

Добавить комментарий

Ваш e-mail не будет опубликован.