2016-12-13 28 views

答えて

2

openfl.utils.Objectは基本的にDynamicのためだけtypedefなので、以下では正常に動作します:

trace(platformObj.filters.manufacturer); // [trace] Main.hx:6: [Adobe Windows] 

あなたはフィールドにアクセスするためにStringを使用する必要は、あなたがtype checkを使用して次の操作を行うことができる場合ボンネットの下に

trace((platformObj["filters"] : Object)["manufacturer"]); 

、このすべてがちょうどreflection次のとおりです。

trace(Reflect.field(Reflect.field(platformObj, "filters"), "manufacturer")); 
+0

3つ目のオプションは、私が探していたものであり、実際には私がそれに取り組んでいた直前だった - 私がとにかく尋ねたことは嬉しいです。それを行う他の方法を知ってうれしいです! –

2

あなただけのドット表記を使用することもできます。

var platformObj = {filters: {manufacturer: ["Adobe Windows"]}}; 
// the type of platformObj is `{filters:{manufacturer:Array<String>}}` in this case 
trace(platformObj.filters.manufacturer); 

それともStringMapを使用することができます。

var platformObj = ["filters" => ["manufacturer" => ["Adobe Windows"]]]; 
// the type of platformObj is `Map<String, Map<String, Array<String>>>` in this case 
trace(platformObj["filters"]["manufacturer"]); 

haXeのはObjectを持っていますが、Dynamicを持っていません。あなたはReflectを使用して、そのフィールドを取得することができます

var platformObj:Dynamic = {filters: {manufacturer: ["Adobe Windows"]}}; 
var filters = Reflect.field(platformObj, "filters"); 
var manufacturer = Reflect.field(filters , "manufacturer"); 
trace(manufacturer); 

あなたはhaXeのを使用している場合は、あなたがDynamicの代わりにAnyを使用することができ3.3+。

最初の2つは安全に使用できます。ダイナミック/リフレクションを使用する最後のものには副作用があります。

+0

オブジェクトを使用して私が言及した情報とダイナミックを含むことの違いは何ですか?ダイナミックを使用すると、オブジェクトのどのような制限が解除されますか? StringMapの言及をありがとう、私は* strict *であることを将来的に使用します。 –

+0

Haxe自体にはObjectはありませんが、Dynamicがあります。 –

+0

ああ、オオプス、私もOpenFLで働いているので、私はHaxeとOpenFLの両方を使っています。 –