💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
如果一个类有 :autoBuild 元数据,编译器生成 :build 元数据 到所有扩展类。如果一个接口有 :autoBuild 元数据,编译器生成 :build 元数据到所有实现类和所有扩展接口。注意 :autoBuild 并不是暗示 :build 到 类/接口 本身。 ~~~ import haxe.macro.Context; import haxe.macro.Expr; class AutoBuildingMacro { macro static public function fromInterface():Array<Field> { trace("fromInterface: " + Context.getLocalType()); return null; } macro static public function fromBaseClass():Array<Field> { trace("fromBaseClass: " + Context.getLocalType()); return null; } } ~~~ ~~~ @:autoBuild(AutoBuildingMacro.fromInterface()) interface I { } interface I2 extends I { } @:autoBuild(AutoBuildingMacro.fromBaseClass()) class Base { } class Main extends Base implements I2 { static public function main() { } } ~~~ 这在编译过程中输出: ~~~ AutoBuildingMacro.hx:6: fromInterface: TInst(I2,[]) AutoBuildingMacro.hx:6: fromInterface: TInst(Main,[]) AutoBuildingMacro.hx:11: fromBaseClass: TInst(Main,[]) ~~~ 重要的是记住 这些宏执行的顺序是未定义的,在构建顺序(第9.6.3节)中详述。