Как инициализировать статический строковый массив в солидности?

#solidity

Вопрос:

Я хочу объявить массив для хранения моих строк следующим образом.

 bytes32[3] verifiedResu<
verifiedResult = ["verified successfully", "verified failed", "not clear"];
 

Ошибка показывает, что

 ParserError: Expected identifier but got '=' --> contracts/1_Storage.sol:23:20: | 23 | verifiedResult = ["verified_successfully", "verified_failed", "not clear"] |^
 

что я должен сделать, чтобы это исправить? Есть ли лучший способ объявить статический строковый массив в солидности?

Ответ №1:

Вы можете использовать string ключевое слово. Или, в вашем случае, массив строк фиксированного размера (3).

 pragma solidity ^0.8.4;

contract MyContract {
    // string in storage
    string[3] verifiedResult = ["verified successfully", "verified failed", "not clear"];
    
    function foo() external {
        // string in memory
        string[3] memory anotherStringArray = ["verified successfully", "verified failed", "not clear"];
    }
}
 

Кроме того, ваша копия выглядит так, как будто вы можете использовать перечисление.

 pragma solidity ^0.8.4;

contract MyContract {
    enum VerifiedResult {VerifiedSuccessfully, VerifiedFailed, NotClear}
    
    VerifiedResult resu<
    
    function foo() external {
        result = VerifiedResult.NotClear; // stores `NotClear` to the `result` property
    }
}
 

Комментарии:

1. Спасибо за ваш ответ, enum это очень хорошее мнение. Но я хочу показать строку на экране, что означает, что мне нужно вернуть строку. могу ли я вернуть статическую строку точно так же, как это return verfiedResult[0] ?

2. Да, вы можете развернуть первый фрагмент и вернуть строку следующим образом: function foo() external returns (string memory) { return verifiedResult[0]; }