Haxe - 使用字符串作为 DynamicAccess 的变量名

Haxe - use string as variable name with DynamicAccess

我正在尝试使用字符串 ('npcName') 作为变量名。到目前为止,我已经尝试将 dialogMap 转换为 DynamicAccess 对象,但是当我尝试这个时它给了我错误 'Invalid array access':

    var npcName:String = 'TestNPC';
    var casted = (cast Registry.dialogMap:haxe.DynamicAccess<Dynamic>);
    var tempname = casted[root.npcName[0].message];
    trace(tempname);

'dialogMap' 是一张空地图,我想这样填充它:

Registry.dialogMap['message'] = root.npcName[0].message;

如何在上面的代码行中使用字符串 npcName?有没有办法将字符串转换成可用的东西?任何帮助将不胜感激。

haxe.DynamicAccess 没有数组访问权限(如 map[key]),但它是一种抽象类型,用于处理旨在通过字符串键保存对象集合的匿名结构。它设计用于 map.get(key)map.set(key)。它基本上是 Reflect.fieldReflect.setField 的更好包装器,并使用 Reflect.hasField.

进行一些安全检查
    var variable = "my_key";
    var value = 123;

    var dynamicMap = new haxe.DynamicAccess<Dynamic>();
    dynamicMap.set(variable, value);

我注意到你做了很多转换和动态,所以 untyped 代码,这在 typed[=42= 中有点矛盾] 语。 dialogMap 的实际类型是什么?

不确定您是否知道,但是,Haxe 有自己的地图,这些地图是完全类型化的,因​​此您不需要转换。

    var map = new Map<String, Int>();
    map[variable] = value;

我认为 this article 有助于理解如何使用动态(无类型)对象。

Tip; for testing such small functionalities you can doodle around on the try.haxe site : http://try.haxe.org/#4B84E

希望这对您有所帮助,否则这里是一些相关文档: