簡體   English   中英

如何使用 Haxe 宏構建摘要?

[英]How to build an abstract with a Haxe macro?

我找不到任何可用宏創建摘要的示例代碼或教程。

//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 具體化,以便可以使用常規的 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 {} {}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM