我正在尝试使用字符串('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,一个字符串?有没有办法将字符串转换为可用的东西?任何帮助将不胜感激。
答案 0 :(得分:3)
haxe.DynamicAccess
没有数组访问权限(如map[key]
),但它是一种抽象类型,用于处理匿名结构,这些结构旨在通过字符串键来保存对象集合。它旨在与map.get(key)
和map.set(key)
一起使用。它基本上是围绕Reflect.field
和Reflect.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
希望这会有所帮助,否则这里有一些相关的文档: