Я только начинаю с Solidity
и JavaScript
пытаюсь понять Enums. у меня простой договор
pragma solidity ^0.4.4;
contract SimpleEnum {
enum SomeData {Channel}
SomeData sd;
function set_values(uint a) {
sd.Channel = a
return sd
}
}
Я пытаюсь понять, как я могу установить Channel
, но, похоже, это не работает.
У вас есть некоторые ошибки, поэтому подумайте о том, чтобы прочитать документацию по Solidity . Кроме того, ремикс — это удобный инструмент для кодирования, отладки и упражнений по кодированию. Я изменил ваш код следующим образом:
pragma solidity ^0.5.0;
contract SimpleEnum {
enum SomeData {DEFAULT,ONE,TWO}
SomeData someData;
constructor() public {
someData = SomeData.DEFAULT;
}
function setValues(uint _value) public {
require(uint(SomeData.TWO) >= _value);
someData = SomeData(_value);
}
function getValue() public view returns (uint){
return uint(someData);
}
}
Надеюсь поможет~
Обновить
О Enums , описанном ниже:
перечисления — это один из способов создания пользовательского типа в Solidity. Они могут быть явно преобразованы во все целочисленные типы и из них, но неявное преобразование не допускается. Явные преобразования проверяют диапазоны значений во время выполнения, и сбой вызывает исключение. Enums требуется по крайней мере один член.
Значения перечисления нумеруются в порядке их определения, начиная с 0. Если вы хотите получить значение перечисления, выполните uint(enum_variable)
.
Обратитесь к документации enum ,
pragma solidity ^0.4.16;
contract test {
enum ActionChoices { GoLeft, GoRight, GoStraight, SitStill }
ActionChoices choice;
ActionChoices constant defaultChoice = ActionChoices.GoStraight;
function setGoStraight() public {
choice = ActionChoices.GoStraight;
}
// Since enum types are not part of the ABI, the signature of "getChoice"
// will automatically be changed to "getChoice() returns (uint8)"
// for all matters external to Solidity. The integer type used is just
// large enough to hold all enum values, i.e. if you have more values,
// `uint16` will be used and so on.
function getChoice() public view returns (ActionChoices) {
return choice;
}
function getDefaultChoice() public pure returns (uint) {
return uint(defaultChoice);
}
}
Из этого официального примера видно, что функция getChoice()
возвращает индекс этого действия. Итак, я предполагаю, что перечисление похоже на список в python
, который преобразует значения внутри в соответствующий индекс.
вапити
БинГоБинБин
вапити
БинГоБинБин