Haxe - 在DynamicAccess

时间:2017-01-06 07:00:29

标签: haxe

我正在尝试使用字符串('npcName')作为变量名。到目前为止,我已经尝试将dialogMap转换为DynamicAccess对象,但是当我尝试这个时它给出了错误“无效的数组访问”:

    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,一个字符串?有没有办法将字符串转换为可用的东西?任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:3)

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);

我注意到你正在做很多演员和动态,所以无类型的代码,这在类型的语言中有点矛盾。 dialogMap的实际类型是什么?

不确定你是否知道它但是,Haxe有自己的地图,这些地图是完全打字的,所以你不需要演员表。

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

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

  

提示;为了测试这些小功能,你可以在try.haxe网站上涂鸦:http://try.haxe.org/#4B84E

希望这会有所帮助,否则这里有一些相关的文档: