枚举¶
枚举作为类型¶
enum 枚举类型名 by 值的类型 as type { // as type 可以省略
枚举元素1 = 值1, // = 值1 可以省略,此时默认为前一个元素的值加 1
枚举元素2 = 值2, // 务必添加尾随逗号
// ...
}
// 此时 typeof(枚举元素1) is 枚举类型名
也可以不写值的类型,此时默认为 int
。
enum 枚举类型名 {
枚举元素1 = 值1,
枚举元素2 = 值2,
// ...
}
在使用字符串作为枚举值的类型时,不应该省略值,否则会出现以下情况。
enum 枚举类型名 by str {
枚举元素1 = "",
枚举元素2 = "1",
枚举元素3 = "11",
枚举元素4 = "111",
// ...
}
枚举作为容器¶
也可以将枚举用作一个容器,其中的元素可以直接参与运算。
enum 枚举名 by 值的类型 as container {
枚举元素1 = 值1,
枚举元素2 = 值2,
// ...
}
// 此时 typeof(枚举元素1) is 值的类型
注意此时枚举本身并不是一个类型,以下代码会导致报错:
枚举名 my_var = 枚举元素1; // error: `枚举名` 不是一个类型
限制枚举只在编译期有效¶
将值的类型设为 void
可以阻止枚举元素的值在运行时被访问,此时枚举元素只能用于编译期的判断。
enum 枚举名 by void {
枚举元素1, // 当然这不能写 = 值
枚举元素2,
// ...
}
枚举内函数¶
枚举作为类型时内部可以定义函数。
但作为容器时只能定义静态函数。
enum 枚举名 by 值的类型 as type {
枚举元素1,
枚举元素2; // 以分号结尾
fn 函数名(参数列表) -> 返回类型 {
// 函数体
}
// ...
}
enum 枚举名 by 值的类型 as container {
static fn 函数名(参数列表) -> 返回类型 {
// 函数体
}
// ...
}