【发布时间】:2016-06-30 21:57:57
【问题描述】:
这工作正常:
//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});
}
但实际上有时 myArr.length == 0 会导致编译错误:
Array<Unknown<0>> should be haxe.ds.StringMap<Dynamic>
所以如果 myArr 的长度为零,我应该将 $a{myArr} 替换为 null 或 new StringMap(),但我该怎么做呢?
目前我是这样做的:
var newExpr = myArr.length == 0 ?
macro {
Foo.bar(null);
} : macro {
Foo.bar($a{myArr});
};
但实际上宏中的代码更大......
【问题讨论】: