我想编写自己的宏来创建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;
}
}
我阅读了相应的文档,但说实话,我觉得它们很混乱。
感谢
答案 0 :(得分:1)
您可能想看一下tinkerbell如何解决同一问题:https://github.com/back2dos/tinkerbell/wiki/tink_lang#wiki-accessors
答案 1 :(得分:0)
在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类之前运行宏(添加函数)。