我阅读了Haxe中的枚举,我发现构造函数文档相当混乱。他们说它支持构造函数只是给出了一个非常基本的例子:
enum Color2 {
Red;
Green;
Blue;
Rgb( r : Int, g : Int, b : Int );
}
我可以创建一个构造函数来解析字符串以确定值吗?
答案 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!';
}
}
}
但是你不能在枚举中声明这样的辅助方法。