企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
静态扩展(第6.3节)和宏的概念有一些冲突:前者需要一个已知类型来确定使用的函数,而宏在类型化简单的语法之前执行。因此毫不奇怪,结合使用这两个特性可能导致问题。Haxe 3.0 会尝试转换 类型化表达式回到一个 语法表达式,并不总是可行,可能丢失一些重要信息。我们建议小心使用。 **从 Haxe 3.1.0 以后:** 静态扩展和宏的组合在 3.1.0 版本被重构。Haxe编译器甚至不设法寻找宏参数最初的表达式,而是传递一个特殊的 @:this this 表达式。而这个表达式的结构不传达信息,表达式仍然被正确的类型化: ~~~ import haxe.macro.Context; import haxe.macro.Expr; using Main; using haxe.macro.Tools; class Main { static public function main() { #if !macro var a = "foo"; a.test(); #end } macro static function test(e:ExprOf<String>) { trace(e.toString()); // @:this this // TInst(String,[]) trace(Context.typeof(e)); return e; } } ~~~