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 there is no constructor
如何修复编译器错误?
解决方案
重要的是要意识到,为类和抽象构建宏之间没有任何区别。在这两种情况下,它们都会构建字段,这意味着它们必须返回一个haxe.macro.Expr.Field
. 因此,适用于其中一个的任何文档或代码示例也适用于另一个。
在您的示例中修复编译器错误的最简单/最易读的方法是使用类 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 {} {}
推荐阅读
- java - 通过反射找到一个签名不完全已知的方法
- reactjs - 在 Redux 中处理 API 调用而不执行任何操作
- php - Mysql apache2 - phpmyadmin 导入错误(php 7.2)
- node.js - 向特定客户端/连接发送数据并处理来自特定客户端/连接的响应数据 - Node.js - 网络套接字
- unit-testing - UnitTestIsolationException:无法从 COR_PROFILER_PATH 和 COR_PROFILER 环境变量解析探查器路径
- genymotion - genymotion chrome 不适用于 charles,出现错误“无法连接到外部代理”
- regex - Powershell核心 - 正则表达式
- javascript - 如何轻松让asyn/await与js中的传统回调函数一起工作
- java - 使用 sqlite 时调用成员函数 fetchObject()
- sql - Microsoft Access 相当于 OPENQUERY()