Содержание

Геттер-функции в Solidity

Компилятор автоматически создает геттер-функции для всех public глобальных переменных. В коде ниже компилятор сгенерирует функцию data, которая не принимает никаких аргументов и возвращает uint (беззнаковое целое) значение глобальной переменной data. Инициализировать глобальные переменные можно при объявлении.

pragma solidity ^0.4.0;

contract C {
    uint public data = 42;
}

contract Caller {
    C c = new C();
    function f() public {
        uint local = c.data();
    }
}

Геттер-функции имеют external видимость. Если символ доступен внутренне (т.е. без this.), то он расценивается как глобальная переменная. Если он доступен внешне (т.е. с this.), то он расценивается как функция.

pragma solidity ^0.4.0;

contract C {
    uint public data;
    function x() public {
        data = 3; // internal доступ
        uint val = this.data(); // external доступ
    }
}

Следущий пример немного сложнее:

pragma solidity ^0.4.0;

contract Complex {
    struct Data {
        uint a;
        bytes3 b;
        mapping (uint => uint) map;
    }
    mapping (uint => mapping(bool => Data[])) public data;
}

Здесь будет создана функция следующей формы:

function data(uint arg1, bool arg2, uint arg3) public returns (uint a, bytes3 b) {
    a = data[arg1][arg2][arg3].a;
    b = data[arg1][arg2][arg3].b;
}

Заметьте, что из структуры здесь есть только a и b, а маппинга нет. Это потому что нет хорошего способа, чтобы предоставить ключ для маппинга.

Материал был полезен? Поделитесь в соц. сетях:
Логотип echain.ru

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

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