2017-01-06 1 views
3

J'essaie d'utiliser une chaîne ('npcName') comme nom de variable. Jusqu'à présent, je l'ai essayé coulée dialogMap dans un objet DynamicAccess, mais il me donne l'erreur « accès au tableau non valide » lorsque je tente ceci:Haxe - utilise une chaîne comme nom de variable avec DynamicAccess

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

« dialogMap » est une carte vide que je veux remplir comme ceci: Comment puis-je utiliser npcName, une chaîne, dans la ligne de code ci-dessus? Y a-t-il un moyen de transformer la chaîne en quelque chose d'utilisable? Toute aide serait appréciée.

Répondre

3

Le n'a pas accès au tableau (comme map[key]), mais est un type abstrait pour travailler avec des structures anonymes qui sont destinées à contenir des collections d'objets par la clé de chaîne. Il est conçu pour fonctionner avec map.get(key) et map.set(key). Il est fondamentalement une enveloppe plus agréable autour de Reflect.field et Reflect.setField et fait quelques vérifications de sécurité avec Reflect.hasField.

var variable = "my_key"; 
    var value = 123; 

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

Je vous fais remarquer très bien moulé et dynamique, de sorte typées Code, qui est un peu de contradiction dans un langage typé . Quel est le type actuel de dialogMap?

Vous n'êtes pas sûr de l'avoir remarqué, mais Haxe a ses propres cartes, qui sont entièrement typées, donc vous n'avez pas besoin de moulages.

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

Je pense this article aide à comprendre comment travailler avec des objets dynamiques (typées).

Pointe; pour tester ces petites fonctionnalités, vous pouvez griffonner autour sur le site try.haxe: http://try.haxe.org/#4B84E

Hope this helps, est par ailleurs ici une documentation pertinente: