Haxe的构造函数和枚举

时间:2014-04-14 00:51:57

标签: enums haxe

我阅读了Haxe中的枚举,我发现构造函数文档相当混乱。他们说它支持构造函数只是给出了一个非常基本的例子:

enum Color2 { Red; Green; Blue; Rgb( r : Int, g : Int, b : Int ); }

我可以创建一个构造函数来解析字符串以确定值吗?

1 个答案:

答案 0 :(得分:3)

名称“构造函数”可能会引起一些混淆。术语来自将“枚举”视为对象,“构造函数”创建该对象的新实例。

在颜色示例中:

// Variable `c` holds an object of type `Color`
var c:Color; 

// Set the value `c` to a `Color` object using the `Red` constructor.
c = Red; 

// Set the value `c` to a `Color` object using the `Rgb` constructor, 
// and values [255,255,0].
c = Rgb(255,255,0); 

因此每个枚举“value”实际上是一个构造函数 - “Color”的各种值是用于创建“Color”类型对象的构造函数。这很令人困惑,因为如果构造函数没有参数,则使用它而不使用括号:Red,它不像函数调用。

至于你在问什么:你能创建一个解析字符串来确定值的函数吗?

不是来自枚举。枚举只能有如上所示的简单构造函数。您可以使用静态方法帮助类:

class ColorTools {
    static function make( name:String ) {
        return switch (name) {
            case "red": Red;
            case "blue": Blue;
            case "green": Green;
            case "black": Rgb(0,0,0);
            case "white": Rgb(255,255,255);
            default: throw 'unknown colour!';
        }
    }
}

但是你不能在枚举中声明这样的辅助方法。