私はのjavascriptをターゲティングしています。Haxeで名前で動的に知られているコンストラクタの配列を生成するマクロを作成するには?
私はで動作するマクロを持っています。Context.onGenerate()完全修飾型のサブセットをファイルに保存しています。次に、別のビルドマクロ(次のbuidで実行される)はファイルから型名のリストを読み込み、その型(コンストラクタ)を配列内に保持することになっているクラスに静的フィールドを追加します。
私は2番目のマクロから生成したいフィールドには、このようなものになるだろう:次のJavaScript
MyClass._entities = [ entities_Foo, entities_Bar, ... ];
は今、私は手動でフィールドを書いてみました生成されます
public static _entities:Array<Class<entities.Entity>> = [
entities.Foo,
entities.Bar,
...
];
すべてが正しく生成されることを確認する - そうする。
var id = { expr: EConst(CIdent("entities.Foo")),
pos: Context.currentPos() };
var ex = EArrayDecl([ id ]);
fields.push({
name : "_entities",
access : [Access.APublic, Access.AStatic ],
pos : Context.currentPos(),
kind : FVar(
macro:Array<Class<entities.Entity>>,
// I've tried writing it without reification: (see above vars)
{ expr: ex, pos:Context.currentPos() }
// Or w/ reification:
macro $a{[ $i{ "entities.Foo" } ]}
)
});
:しかし、私はマクロを書くための正しい方法を把握することはできません、私はいつも
「不明な識別子」エラーで終わる配列式の値として一定の識別子を、追加で立ち往生
私はマクロで可能なことを達成しようとしていますか?もしそうなら、これを達成するために私を指示することができますか?
ありがとうございます。
これは私が見つけた解決策よりずっと簡単です。そしてそれは完全に働いた。さらに便利なチップ、nadakoありがとう。 –