【发布时间】:2016-04-18 11:26:27
【问题描述】:
我想创建一个宏,为我的类添加一个字段,字段值应该是他们所在类的Class<T>。这是我的最小示例,它不会因为这个错误而编译:
src/Base.hx:3:字符 2-11:未知标识符:foo.Foo
但是如果我将 Foo 从包 foo 移动到根包,那么它可以编译并工作。
Main.hx
import foo.Foo;
class Main
{
static function main()
{
trace(Foo.data);
}
}
构建.hx
import haxe.macro.Context;
import haxe.macro.Type;
import haxe.macro.Expr;
class Build
{
macro static public function build(DataClass):Array<Field>
{
var cls = Context.getLocalClass().get();
var pack = cls.pack.concat([cls.name]);
var name = pack.join(".");
trace(name);
var expr = {
expr: ExprDef.EConst(Constant.CIdent(name)),
pos: Context.currentPos()
}
var newFieldCls = macro class {
public static var data:Class<Dynamic> = $expr;
}
var fields = Context.getBuildFields();
return fields.concat(newFieldCls.fields);
}
}
Base.hx
package;
@:autoBuild(Build.build(Main.Data))
class Base
{
public function new()
{
}
}
foo/Foo.hx
package foo;
class Foo extends Base
{
}
【问题讨论】: