Кросс-компиляторы, которые генерируют идиоматический код

Мы можем объединить две коллекции, используя sub-запрос mongoDB. Вот пример, Комментарии -

`db.commentss.insert([
  { uid:12345, pid:444, comment:"blah" },
  { uid:12345, pid:888, comment:"asdf" },
  { uid:99999, pid:444, comment:"qwer" }])`

Пользователи -

db.userss.insert([
  { uid:12345, name:"john" },
  { uid:99999, name:"mia"  }])

Суб-запрос MongoDB для JOIN -

`db.commentss.find().forEach(
    function (newComments) {
        newComments.userss = db.userss.find( { "uid": newComments.uid } ).toArray();
        db.newCommentUsers.insert(newComments);
    }
);`

Получить результат из недавно созданная коллекция -

db.newCommentUsers.find().pretty()

Результат -

`{
    "_id" : ObjectId("5511236e29709afa03f226ef"),
    "uid" : 12345,
    "pid" : 444,
    "comment" : "blah",
    "userss" : [
        {
            "_id" : ObjectId("5511238129709afa03f226f2"),
            "uid" : 12345,
            "name" : "john"
        }
    ]
}
{
    "_id" : ObjectId("5511236e29709afa03f226f0"),
    "uid" : 12345,
    "pid" : 888,
    "comment" : "asdf",
    "userss" : [
        {
            "_id" : ObjectId("5511238129709afa03f226f2"),
            "uid" : 12345,
            "name" : "john"
        }
    ]
}
{
    "_id" : ObjectId("5511236e29709afa03f226f1"),
    "uid" : 99999,
    "pid" : 444,
    "comment" : "qwer",
    "userss" : [
        {
            "_id" : ObjectId("5511238129709afa03f226f3"),
            "uid" : 99999,
            "name" : "mia"
        }
    ]
}`

Надеюсь, что это поможет.

0
задан nwb 17 January 2019 в 14:27
поделиться

2 ответа

Качество вывода Haxe зависит от языкового бэкэнда (чтобы иметь согласованное поведение во всех бэкэндах), но его всегда можно улучшить Когда вы компилируете его в JavaScript, у него возникает ощущение «я дома».

class HelloWorld {
    static public function main() {
        trace("Hello World");
    }
}

Результаты:

(function () { "use strict";
var HelloWorld = function() { };
HelloWorld.main = function() {
    console.log("Hello World");
};
HelloWorld.main();
})();

0
ответ дан Mark Knol 17 January 2019 в 14:27
поделиться

Использование @:nativeGen и зависящей от платформы функции печати (вместо специфичной для Haxe, требующей информации о местоположении) обычно является хорошим началом,

@:nativeGen class Main {
    static function main() {
        cs.system.Console.WriteLine("hi!");
    }
}
public class Main {

    public Main() {
    }


    public static void main() {
        global::System.Console.WriteLine(((string) ("hi!") ));
    }


}

Как уже упоминалось, многословие варьируется в зависимости от платформы - например, Haxe-> JS или Haxe-> AS3 создает довольно написанный от руки код, в то время как Haxe-> C # и Haxe-> C ++ включают множество неявных приведений, чтобы исключить любой риск двусмысленности кода.

Можно использовать API CustomJSGenerator от Haxe для написания пользовательских генераторов для языков, отличных от JS (и преобразования кода для соответствия соглашениям / многословию) - например, я создал Haxe-> GML (сценарий язык, напоминающий смесь генератора плоских C и JS), и позволил ему очень близко соответствовать исходной структуре: idiomatic output with Haxe->GML

0
ответ дан YellowAfterlife 17 January 2019 в 14:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: