假设我创建了一个可以像这样使用的构建宏
@: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/