作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我找不到任何使用宏创建摘要的示例代码或教程。
//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.macro.Expr.Field
的数组。 。因此,适用于其中一个的任何文档或代码示例也适用于另一个。
修复示例中编译器错误的最简单/最易读的方法是使用 class reification ,以便可以使用常规 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 {} {}
关于macros - 如何使用 Haxe 宏构建摘要?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60379484/
我是一名优秀的程序员,十分优秀!