宏观结构子类型

时间:2015-05-08 00:49:07

标签: haxe structural-typing

这个映射JSON对象的函数得到@:build - ed。当只有一个JSON文件或所有文件共享相同的字段结构时,它工作正常。但是当对象的结构不同时,我得到结构子类型错误(“对象需要字段xxx”)。最重要的是,对象的顺序有时很重要。

我不明白为什么要进行类型检查;你会认为他们会成为一个对象并且独自留下。任何人都可以看到我是不是正确地做了什么;否则我会在Github上提出问题。

public static function build():Array<Field> {

    var fields = Context.getBuildFields();

    // Object requires field "deep"
    var files = ['{"name": "Test1", "id": { "deep" : 5 }}','{"name": "Test0","id": {}}'];

    // no error
    // var files = ['{"name": "Test0","id": {}}','{"name": "Test1", "id": { "deep" : 5 }}'];

    var a:Array<Expr> = [];
    for (s in files) {
        var o = Context.parseInlineString(s, Context.currentPos());
        a.push({ expr : EBinop(OpArrow, macro $v{s}, o), pos : Context.currentPos() });
    }

    var newfield:Field = {
        name : "files", doc : null, meta : [], access : [AStatic, APublic], pos : Context.currentPos(),
        // map array decl: [x => y]
        kind : FVar(macro : StringMap<Dynamic>, { expr : EArrayDecl(a), pos : Context.currentPos() } )
    };

    fields.push(newfield);

    return fields;
}

我正在使用 Haxe 3.2.0-rc2

0 个答案:

没有答案