Macros 如何使用Haxe宏构建抽象?
我找不到任何使用宏创建摘要的示例代码或教程Macros 如何使用Haxe宏构建抽象?,macros,haxe,Macros,Haxe,我找不到任何使用宏创建摘要的示例代码或教程 //Class code ReflectionClassInfo.hx @:build(ReflectionClassInfoMacro.build()) abstract ReflectionClassInfo({}) from ({}) to ({}) {} //Driver code var r=new ReflectionClassInfo(); //Immeditately makes the compiler complain about
//Class code ReflectionClassInfo.hx
@:build(ReflectionClassInfoMacro.build())
abstract ReflectionClassInfo({}) from ({}) to ({}) {}
//Driver code
var r=new ReflectionClassInfo();
//Immeditately makes the compiler complain about there is no constructor
如何修复编译器错误?需要了解的一点是,类的构建宏和抽象的构建宏之间实际上没有任何区别。在这两种情况下,它们都构建字段,这意味着它们必须返回一个数组。因此,任何适用于其中一个的文档或代码示例也适用于另一个 修复示例中编译器错误的最简单/可读性最强的方法是使用,这样就可以使用常规Haxe语法声明构造函数:
import haxe.macro.Context;
import haxe.macro.Expr.Field;
class Macro {
public static function build():Array<Field> {
var fields = Context.getBuildFields();
fields = fields.concat((macro class {
public function new() {
this = {};
}
}).fields);
return fields;
}
}
啊,现在我明白了!!非常感谢,我可以从这里开始。
class Main {
static function main() {
new Abstract(); // compiles
}
}
@:build(Macro.build())
abstract Abstract({}) from {} to {} {}