Solidity编程语言(11)--枚举enum

Solidity中枚举类型与其他编程语言基本一样。我们来看一个例子,比如定义个季节的枚举。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
pragma solidity >=0.4.0 <0.6.0;

contract EgEnum{
enum Season{Spring, Summer, Autumn, Winter}

function printSeason(Season s) public returns(Season) {
return s;
}

function test1() public returns(Season){
return printSeason(Season.Spring);
}

function test2() public returns(uint){
uint s = uint(Season.Spring);
return s;
}

function test3() public returns(Season){
//Season s = Season(5);//越界
Season s = Season(3);
return s;
}
}
  1. enum的实际类型是无符号整数,当枚举数量是0-127范围内,则enum是uint8类型的,如果是0-32,767范围内,则enum是uint16类型的,以次类推。
  2. 既然enum是uint类型,则可以进行类型转换,比如uint s = uint(Season.Spring)是将枚举Season类型转换在uint,当然也可以转成uint8,只要不越界就可以。同样Season s = Season(3)是将uint转成Season类型的。同样需要注意的是整数不要超过枚举的范围,比如Season的范围是0-3,如果将5转换成Season则会在运行进出现异常,而编译可以通过。