枚举

定义枚举

枚举默认是模块内访问,通过pub关键字来定义公共枚举。

枚举的命名跟结构体命名一样,必须以大写字母开头,枚举项的名称跟函数命名一样,必须是小写加下划线。

enum Color {
	blue // 如果没有指定初始值,默认从0开始,然后往下递增1
	green
	white
	black
}

fn main() {
	mut c := Color.green // 第一次定义要使用:枚举名称.枚举值
	println(c) // 输出green
	c = Color.blue
	c = .blue // 第二次修改赋值,也可以忽略枚举名称,直接使用.枚举值就可以了
	println(c) // 输出blue
}

也可以指定枚举值的值,枚举值也可以是负数:

也可以指定枚举的值为16进制:

枚举值类型

枚举值默认是int类型,也可以使用as来明确指定枚举值的类型,枚举值的类型只能是内置的整数类型。

枚举方法

枚举也可以像结构体那样添加方法:

枚举值/整型相互转换

枚举类型和整数类型可以相互转换,不过有一点需要特别注意,将整数转换为枚举类型,属于跨类型的强制转换,必须在不安全代码块中执行,不然编译器会报错。

枚举类型数组

可以定义枚举类型的数组,数组的值是某个枚举项:

遍历枚举值

可以使用$for in语句来遍历所有的枚举值:

枚举注解

@[flag]注解

如果给枚举加了@[flag]注解,就表示这个枚举是位字段类型的枚举,枚举项的值不能自定义设置,由编译器自动设置,按顺序是2的n次方,n从0开始:1,2,4,8,16 ...。

如果枚举是位字段类型的枚举,可以使用以下内置方法:

自定义注解

可以像结构体和函数那样,给枚举和枚举值添加自定义注解,然后自己解析使用。

关于注解的进一步使用,可以参考注解章节

枚举注解:

枚举值注解:

最后更新于

这有帮助吗?