多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
多数时候,宏的参数是表示为一个 enum Expr的实例的表达式。这样,它们被解析但没有类型化,意味着它们可以是符合Haxe的语法规则的任何内容。宏然后可以检视它们的结构,或者使用 haxe.macro.Context.typeof() 方法(尝试)得到它们的类型。 重要的是要理解宏的参数不保证被评估,所以任何预期的副作用不保证会出现。另一方面,同样重要的是理解一个参数表达式可能被一个宏复制和多次用在返回的表达式中: ~~~ import haxe.macro.Expr; class Main { static public function main() { var x = 0; var b = add(x++); trace(x); // 2 } macro static function add(e:Expr) { return macro $e + $e; } } ~~~ 宏 add 被调用,x++作为参数,并因此使用表达式具体化(第9.3.1节)返回 x++ + x++ ,使 x 被增加两倍。