[英]How do I create a macro for property extensions
我想編寫自己的宏以在Haxe中創建諸如對象之類的屬性。 這個問題不是關於屬性的,而是關於編寫宏的。 (可能NME已經有一個宏了)。
在haxe中上課
class Foo {
@:property var bar:String;
}
我喜歡將其擴展到
class Foo {
private var bar:String;
public function setBar(_val:String):void {
this.bar = _val;
}
public function getBar():String {
return this.bar;
}
}
我閱讀了相應的文檔,但老實說,我覺得它們很混亂。
謝謝
您可能想看看tinkerbell如何解決相同的問題: https : //github.com/back2dos/tinkerbell/wiki/tink_lang#wiki-accessors
Haxe手冊中的這個Type Builder示例 (在下面粘貼,以供參考,但是在鏈接上有更好的描述)是一個向類添加函數的不錯的簡單示例。
添加屬性將幾乎相同。 我添加了一個trace(field)循環來幫助您了解它們的定義方式:
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類本身之前就知道要運行該宏(添加了函數)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.