💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
几乎每个其他语言都实现一个枚举类型的格式作为定义一组固定符号的列表。在Haxe中这个功能通过 enum 语法提供。通常在其他语言中枚举被映射到一些数值整数值。Haxe不限于此:enum 是一个一级类类型的定义,表示一个带有固定的一组构造器(0或者更多)而且可以包含参数。 正确的语法如下: ~~~ enum Name { firstConstructor; otherConstructor(a1 : Type, ?a2 : Type); } ~~~ enum 名遵循类名的惯例约定。 最简单的形式,它们擅长于限制一些特定值: ~~~ class Main { static function main() { trace(ByteUnitTools.humanize(1100, Kilobyte)); // trace “1.07 megabyte(s)” } } enum ByteUnit { Byte; Kilobyte; Megabyte; } class ByteUnitTools { public static function getBytes(unit : ByteUnit) : Int { return switch(unit) { case Byte: 1; case Kilobyte: 1024; case Megabyte: 1024 * 1024; } } public static function humanize(value : Int, unit : ByteUnit) : String { var bytes = getBytes(unit) * value; return if(bytes < = getBytes(Kilobyte)) bytes + “ byte(s)” else if(bytes < = getBytes(Megabyte)) round(bytes / getBytes(Kilobyte)) + “ kilobyte(s)” else round(bytes / getBytes(Megabyte)) + “ megabyte(s)”; } private static function round(value : Float) { return Math.round(value * 100) / 100; } } ~~~ 注意你可以使用一个构造器标识符直接的,而不是任何的前缀;类型名前缀必须只能用在有歧义的情况。 Switch 和 enum有很大的亲和力当在一起使用。如果你添加一个gigabyte到 ByteUnit 并尝试再次编译,一个编译时错误会被抛出。因为switch语句需要所有可能的enum中的情况被完全考虑到。要绕过这个问题,需要提供一个新的情况到switch语句,或者替代一个回退的defalut 情况。 这个行为有助于检测错误和不一致的情况在较早的阶段。