Солидность: как инициализировать массив исправлений из одного значения? - PullRequest
2 голосов
/ 08 июня 2019

Я хочу передать один параметр в виде массива в вызов функции:

contract MyToken is StandaloneERC20 {

    function initialize(
        address owner,
        address minter,
        address[] memory pausers
    ) public initializer {

        address[] memory minters = [minter];

        StandaloneERC20.initialize("MyToken", "MTK", uint8(18), minters, pausers);
    }

StandaloneERC20.initialize ожидает массив для четвертого аргумента minters:

function initialize(
    string memory name, string memory symbol, uint8 decimals, address[] memory minters, address[] memory pausers
) public initializer {

Однако, используя мой код, я получаю следующую ошибку компилятора с надежностью 0.5.7:

TypeError: Type address[1] memory is not implicitly convertible to expected type address[] memory.

    address[] memory minters = [minter];
    ^---------------------------------^

Я также пытался передать minter как аргумент-массив:

contract MyToken is StandaloneERC20 {

    function initialize(
        address owner,
        address minter,
        address[] memory pausers
    ) public initializer {

        StandaloneERC20.initialize("MyToken", "MTK", uint8(18), [minter], pausers);
    }

Но, похоже, это полностью отличается от того, что я ожидал из-за ошибки компилятора:

Member "initialize" not found or not visible after argument-dependent lookup in type(contract StandaloneERC20).
        StandaloneERC20.initialize("MyToken", "MT", uint8(18), [minter], pausers);
        ^------------------------^

Как передать один аргумент в виде массива?

1 Ответ

2 голосов
/ 09 июня 2019

Это способ объявить массив с одним аргументом

contract MyToken is StandaloneERC20 {
    function initialize(
        address owner, 
        address minter, 
        address[] memory pausers
    ) public initializer {
        address[] memory minters = new address[](1);
        minters[0] = minter;
        StandaloneERC20.initialize("MyToken", "MTK", uint8(18), minters, pausers);
    }
}

Вот Solidity документы о Выделении массивов памяти

...