這Type Builder example在Haxe Manual發現(粘貼下面以供參考,但有在鏈路更好的描述)是向類中添加一個函數的一個很好的簡單例子。
添加屬性將大致相同。我添加了一個跟蹤(場)循環,以幫助他們是如何定義的感受:
Main.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類本身之前運行宏(它添加了函數)。
嗨佛朗哥,我看了一下 - 唉,它很迷惑。 我也看過https://github.com/back2dos/tinkerbell/blob/master/src/tink/lang/macros/PropBuilder.hx,但它做了很多事情,它真的不能回答我更基本的問題。例如爲什麼所有的小叮噹類實現「tink.lang.Cls」或者宏系統如何對「@:xxx」做出反應?爲什麼會觸發宏觀系統? 「@:prop」和類PropBuilder之間的關聯又是什麼?我無法找到任何信息 – robkuz