跳转至

枚举

枚举作为类型

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 函数名(参数列表) -> 返回类型 {
        // 函数体
    }
    // ...
}