Dies funktioniert ok:haxe: verschiedene Code in Verdinglichung Makro basierend auf Variablenwert
//somewhere in Foo:
static function bar(arg:StringMap<Dynamic>) {trace(arg.toString())}
...
//somewhere in build macro:
var myArr = [macro "k1"=>100, macro "k2"=>200, macro "k3"=>300];
var newExpr = macro {
Foo.bar($a{myArr});
}
Aber in Wirklichkeit manchmal myArr.length == 0 und diese Zusammenstellung Fehler gibt:
Array<Unknown<0>> should be haxe.ds.StringMap<Dynamic>
Also ich sollte $ a {myArr} durch null oder new StringMap() ersetzen, wenn die Länge von myArr null ist, aber wie kann ich das tun?
Zur Zeit habe ich dies:
var newExpr = myArr.length == 0 ?
macro {
Foo.bar(null);
} : macro {
Foo.bar($a{myArr});
};
Aber der Code in Makro in Wirklichkeit ist größer ...