gpt4 book ai didi

enums - 在 Haxe 中迭代枚举摘要

转载 作者:行者123 更新时间:2023-12-01 22:24:06 25 4
gpt4 key购买 nike

如何迭代枚举摘要以获得键值对列表?

示例:

@:enum
abstract ExampleEnumAbstract(UInt) {
public var value1 = 0x0;
public var value2 = 0x1;
public var value3 = 0x2;
}

对于枚举实例,可以通过以下方式完成:

enum ExampleEnum {
Value1;
Value2;
Value3;
}

for(value in Type.allEnums(ExampleEnum))
trace(value);
}

不确定这是否是最好的方法 - 我可以获得 key ;但是,我无法获取值,如下所示:

var keys:Array<String> = Type.getClassFields(ExampleEnumAbstract)

for (key in keys) {
trace(key + " = " + ExampleEnumAbstract[key]);
}

尝试以这种方式获取值会导致编译时错误:

String should be Int
Array access is not allowed on Class<ExampleEnumAbstract.ExampleEnumAbstract_Impl_>

最终是map键值对将是理想的。

最佳答案

据我所知,没有这方面的规范。枚举抽象有点 hackish,通常仅用于绑定(bind)和低级优化。我怀疑在不久的将来 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,
];
}

您还可以创建一个宏来为您生成此(或类似)函数。

回到您的ExampleEnumAbstract[key]代码:当然它不会工作。您可以使用Reflect.field使其工作,但是不能保证这些值在运行时存在

关于enums - 在 Haxe 中迭代枚举摘要,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27579587/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com