如何使用Haxe宏构建摘要?

问题描述 投票:0回答:1

我找不到任何示例代码或教程,这些示例代码或教程都没有创建带有宏的摘要。

//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

如何解决编译器错误?

macros haxe
1个回答
0
投票

要实现的重要一件事是,用于类和抽象的构建宏之间实际上并没有任何区别。在这两种情况下,它们都将构建字段,这意味着它们必须返回haxe.macro.Expr.Field的数组。因此,任何适用于一个的文档或代码示例也适用于另一个。

解决示例中编译器错误的最简单/最易读的方法是使用haxe.macro.Expr.Field,以便可以使用常规的Haxe语法声明构造函数:

class reification
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(value) {
                this = {};
            }
        }).fields);
        return fields;
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.