我试图在宏期间从这样格式化的文件构建一个类:
myString;String
myInt;Int
myCustomClass;CustomClass现在,我没有将模块添加到类中,因此宏必须解析它。
这是我的生成器宏:
class Builder {
macro public static function buildController(resourcePath:String):Array<Field> {
resourcePath = haxe.macro.Context.resolvePath(resourcePath);
var pos = haxe.macro.Context.currentPos();
var fields = haxe.macro.Context.getBuildFields();
var entries = sys.io.File.getContent(resourcePath).split("\n");
for (e in entries) {
var data = e.split(";");
var varname = data[0];
var classname = data[1];
var packname = [];
switch(haxe.macro.Context.getType(classname)) {
case TInst(t,_): packname = t.get().pack;
default: throw "Class not found";
}
fields.push( { name : varname
, doc : null
, meta : []
, access : [APrivate]
, kind : FVar(TPath( { pack : packname
, name : classname
, params : []
, sub : null })
, null)
, pos : pos } );
}
return fields;
}
}当我像这样使用它时:
@:build(Builder.buildController("./data.txt"))
class Main {
static public function main() {}
}我知道这个错误:
/usr/lib/haxe/std/haxe/宏/context.hx:249:字符37-45 :无效字段访问:__s Builder.hx:17:字符19-56 :从Main.hx:2调用:字符2-7 :从中止调用
如何从这样的文本文件生成宏中的属性?
发布于 2016-03-28 14:18:06
我不是专家,但看起来像类型解决问题(自定义类?)。单独检查它,字符串一个接一个,而不是数组/文件(对于String和Int将有效,自定义失败)。跟踪TPath结果,可能是一个类似于https://github.com/HaxeFoundation/haxe/issues/1542的问题
看看http://pastebin.com/fAwWPk8q
https://stackoverflow.com/questions/36260874
复制相似问题