2017-01-06 15 views
3

変数名として文字列( 'npcName')を使用しようとしています。これまでのところ私はのDynamicAccessオブジェクトにdialogMapをキャストしようとしているが、私はこれをしようとすると、それは私にエラー「無効な配列アクセス」を提供します:Haxe - 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; 

上記のコード行でnfcName(文字列)を使用するにはどうすればよいですか?文字列を何かに変換する方法はありますか?どんな助けもありがとう。

答えて

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://code.haxe.org/category/beginner/string-variable-reflection.html
  • 関連する問題