は、データの型なし、整理コレクション以上のものではありません。それらの構造は設定されると不変であり、プロパティ値のみを変更することができます。配列アクセス(かっこ表記)は匿名の構造体では定義されていません。代わりにドット表記が使用されます。
匿名構造の型指定されていない(動的)性質のため、静的ターゲットにコンパイルするときにはnegative impact on performanceを持つことができます。
typedefsとtypedef extensionsを使用して匿名構造を整理して入力することをお勧めします。これにより、型の安全性が保証され、コンパイルサーバーは移動中の入力ミスを拾うのに役立ちます。
ポイントを取り戻すには、mapsとtypedefを使用してください。マップでは、メソッドと括弧表記の両方で適切なキーと値のペアを格納できます。また、typedefを使用すると、データ構造を入力して型の安全性を確保できます。念頭に置いて
次のように、あなたのコードスニペットを再作成することができます
class Test {
static var data : Map<String, Room> = new Map<String, Room>();
static function main() {
data["R100"] = { monsterCount: 5 };
data["R200"] = { monsterCount: 10 };
trace(data["R100"].monsterCount);
trace(data["R200"].monsterCount);
}
}
typedef Room = {
var monsterCount : Int;
}
Room
は今{ "monsterCount": (Int) }
データ構造によって記述されたタイプで、部屋のIDを表す文字列キーにマップされます。
マップAPIを使用すると、キー/値のペアをマップしたり、繰り返したりすることができます。詳細についてはAPI docsを確認してください。 lordkryssによって提供さ
編集(2016年7月26日)
答えは完全に有効です。しかし、私がreflectionを育てなかった主な理由が2つあります。
- リフレクションはランタイム機能であり、その使用は不必要にコードを複雑にし、必要な構文を提供しません。
- 反射は、異なるターゲットで高価で予測できないことがあります。
通常、静的なターゲットではなくダイナミックでリフレクションする方がよいでしょう。プロジェクトを開発し、ターゲットプラットフォームを決定する際には、そのことを念頭に置いてください。
反射の影響をよりよく理解するために、生成されたソースを調べることをおすすめします。あなたは公式のtry.haxe.orgサンドボックスを使って、Haxe 3.2.0で生成されたJavaScriptのソースコードを見ることができます。 unofficial sandboxもあり、Haxe 3.3.0-rc.1で生成されたJavaScriptのソースコードを見ることができます。
個人的には、私はリフレクションがあなたの問題に対して許容可能な解決策であるとは思わない。私はあなたの問題を、あなたのデータを表現するための適切なデータ構造を見つけることの一つとして見ています。反射には用途がありますが、私はこの場合は勧めません。
おかげでみんなは、これらすべての答えは素晴らしいです。私はLordKryssの答えを今すぐに持ってきました。なぜなら、実装するのが最も簡単だからですが、実行したときに正しい構造を入れてみることに戻ります。ありがとうGuys – Ferrari177