多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
类似于类和它们的构造函数,枚举通过使用它们的一个构造函数提供了一种实例化方式。然而,与类不同,枚举提供了多个可以简单的通过它们的名字使用的构造函数: ~~~ var a = Red; var b = Green; var c = Rgb(255, 255, 0) ~~~ 在这段代码中变量 `a`,`b` 和 `c` 的类型为 `Color`。变量 `c` 使用 `Rgb` 构造函数和参数来初始化。 所有枚举实例都可以被分配到一个名为 `EnumValue` 的特定类型 。 ## EnumValue >[warning] **类型**:EnumValue `EnumValue` 是一个特别的类型,统一所有的枚举实例。它被 Haxe 标准库使用,来提供对所有枚举实例的某些操作,可以用在用户代码中一个 需要一个枚举实例而不是某个特定的类型的 API 的情况。 重要的是区分枚举类型和枚举构造函数,如这个示例展示的: ~~~ enum Color { Red; Green; Blue; Rgb(r:Int,g:Int,b:Int); } class Main{ public static function main(){ var ec:EnumValue = Red; //有效 var en:Enum<Color> = Color; //有效 // error, Color 应该是 Enum<Color> // var x :Enum<Color> = Red; } } ~~~ 如果上面注释掉的行没有被注释,程序不会通过编译,因为 `Red` (一个枚举构造函数)不能被赋值到一个 `Enum<Color>` (一个枚举类型)类型的变量。这个关系就像类和类的实例。 ## Enum<T> >[warning] **花絮**:Enum<T>的具体类型参数 手册的一个读者困惑于上面示例中 `Color` 和 `Enum<Color>` 的区别。事实上,这里使用一个具体类型参数是没有意义的,只是用于演示目的。通常我们会在这里省略类型,让 [类型推断(第3.6节)](http://#) 来处理它。然而,推断的类型可能和 `Enum<Color>` 不同。编译器推断出一个将枚举的构造函数 作为“字段”的伪类型。自 Haxe3.2.0 起,就不能在语法中表达这个类型,而且也没有必要这么做。