Solidity

列舉如何工作?

  • October 20, 2019

我剛剛開始 Solidity並且JavaScript正在嘗試理解列舉。我有一份簡單的契約

pragma solidity ^0.4.4;

contract SimpleEnum {
 enum SomeData {Channel}
 SomeData sd;

 function set_values(uint a) {
   sd.Channel = a
   return sd
 }
}

我試圖弄清楚如何設置Channel,但它似乎不起作用。

你有一些錯誤,所以考慮閱讀solidity docs。此外,remix是編碼和調試以及編碼練習的便捷工具。我修改了你的程式碼,如下:

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 中創建使用者定義類型的一種方法。它們可以顯式轉換為所有整數類型,但不允許隱式轉換。顯式轉換在執行時檢查值範圍,失敗會導致異常。列舉至少需要一個成員。

列舉值按照定義的順序編號,從 0 開始。如果要獲取列舉的值,請執行uint(enum_variable).

引用自:https://ethereum.stackexchange.com/questions/24086