在Haxe 手册中找到的这个类型生成器示例(粘贴在下面以供参考,但在链接中有更好的描述)是一个很好的、简单的向类添加函数的示例。
添加属性将大致相同。我添加了一个 trace(field) 循环来帮助了解它们是如何定义的:
主文件.hx
@:build(TypeBuildingMacro.build("myFunc"))
class Main {
static public function main() {
trace(Main.myFunc); // my default
}
}
TypeBuildingMacro.hx
import haxe.macro.Context;
import haxe.macro.Expr;
class TypeBuildingMacro {
macro static public function build(fieldName:String):Array<Field> {
var fields = Context.getBuildFields();
for (field in fields) { trace(field); }
var newField = {
name: fieldName,
doc: null,
meta: [],
access: [AStatic, APublic],
kind: FVar(macro : String, macro "my default"),
pos: Context.currentPos()
};
fields.push(newField);
return fields;
}
}
请注意,Main.hx 必须使用@:build
元数据调用宏,因此编译器知道在处理 Main 类本身之前运行宏(添加函数)。