首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用haxe中的宏从文本文件构建类的属性集

使用haxe中的宏从文本文件构建类的属性集
EN

Stack Overflow用户
提问于 2016-03-28 10:56:18
回答 1查看 102关注 0票数 1

我试图在宏期间从这样格式化的文件构建一个类:

代码语言:javascript
复制
myString;String
myInt;Int
myCustomClass;CustomClass

现在,我没有将模块添加到类中,因此宏必须解析它。

这是我的生成器宏:

代码语言:javascript
复制
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;
    }
}

当我像这样使用它时:

代码语言:javascript
复制
@: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 :从中止调用

如何从这样的文本文件生成宏中的属性?

EN

回答 1

Stack Overflow用户

发布于 2016-03-28 14:18:06

我不是专家,但看起来像类型解决问题(自定义类?)。单独检查它,字符串一个接一个,而不是数组/文件(对于String和Int将有效,自定义失败)。跟踪TPath结果,可能是一个类似于https://github.com/HaxeFoundation/haxe/issues/1542的问题

看看http://pastebin.com/fAwWPk8q

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36260874

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档