Jas*_*ges 2 enums enumeration haxe
如何迭代枚举摘要以获得键值对列表?
例:
@:enum
abstract ExampleEnumAbstract(UInt) {
public var value1 = 0x0;
public var value2 = 0x1;
public var value3 = 0x2;
}
Run Code Online (Sandbox Code Playgroud)
对于枚举实例,这可以完成,例如:
enum ExampleEnum {
Value1;
Value2;
Value3;
}
for(value in Type.allEnums(ExampleEnum))
trace(value);
}
Run Code Online (Sandbox Code Playgroud)
不确定这是否是最好的方法 - 我可以获得钥匙; 但是,我无法获得价值,如:
var keys:Array<String> = Type.getClassFields(ExampleEnumAbstract)
for (key in keys) {
trace(key + " = " + ExampleEnumAbstract[key]);
}
Run Code Online (Sandbox Code Playgroud)
试图以这种方式获取值会产生编译时错误:
字符串应该是Int
Array不允许访问Class<ExampleEnumAbstract.ExampleEnumAbstract_Impl_>
最终,一map对关键值对将是理想的.
据我所知,没有规范.枚举摘要有点hackish,通常只用于绑定和低级优化.我怀疑有可能期望rtti在不久的将来和所有平台上都能正常使用它们(顺便提一下,所有的摘要都是如此).
所以,最好的实际方法就是公正
@:enum abstract ExampleEnumAbstract(UInt) {
public var value1 = 0x0;
public var value2 = 0x1;
public var value3 = 0x2;
public static function getConstructorsValues():Map<String, UInt> return [
'value1' => 0,
'value2' => 1,
'value3' => 2,
];
}
Run Code Online (Sandbox Code Playgroud)
您还可以为您生成一个宏来生成此(或类似)函数.
回到你的ExampleEnumAbstract[key]代码:当然它不会工作.您可以通过使用它来使其工作Reflect.field,但不保证值甚至存在于运行时.