macros - Haxe 自定义元数据到宏调用

标签 macros haxe

假设我创建了一个可以像这样使用的构建宏

@:build(macros.SampleMacro.build("arg"))
class Main {}

是否可以将其转换为自定义的速记元数据?
@:samplemacro("arg")
class Main {}

有这方面的文件吗?

最佳答案

我不确定这是否可行,但您可以利用 @:autoBuild() 的事实。元数据适用于接口(interface)。这通常用于像这样的“标记接口(interface)”:

class Main implements ISampleMacro {}

@:autoBuild(macros.SampleMacro.build("arg"))
interface ISampleMacro {}

但是,大概你想要一个不同的"arg"每次使用,而不是对其进行硬编码。您可以使用 @:const 来实现此目的。类型参数:
class Main implements ISampleMacro<"foo"> {}

@:autoBuild(macros.SampleMacro.build())
interface ISampleMacro<@:const T> {}

在构建宏中提取类型参数的值比简单地将参数传递给它需要更多的努力:
switch (Context.getLocalClass().get().interfaces[0].params[0]) {
    case TInst(_.get() => t, params):
        switch (t.kind) {
            case KExpr({expr: EConst(CString(arg)), pos: _}):
                trace(arg); // "foo"
            case _:
        }
    case _:
}

关于macros - Haxe 自定义元数据到宏调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43872908/

相关文章:

linux - Linux 内核代码中的 EXPORT_SYMBOL_GPL 是什么?

c++ - 关于预处理过程中MACROS的扩展

javascript - 在 Haxe 中为 HTML 元素进行元素访问转换

haxe - @:keep mean in Haxe? 是什么

macros - OCaml 中的记录字段更新可以推广吗?

json - ST-JSON JSO 对象的解构宏

algorithm - 随机生成那些Shapes

haxe - 如何在 Haxe 中声明二维数组?

haxe - Haxe 中有某种退出语句吗?

macros - 是否可以使用符号宏来获得类似标签的行为?