Обращение к родительским элементам из вложенных (детей) - PullRequest
1 голос
/ 04 мая 2020

У меня есть следующие jso nnet.

{
        local property = "global variable",

        property: "global property",
        bar: self.property,   // global property
        baz: property,        // global variable

        nested: {
            local property = "local variable",

            property: "local property",
            bar: self.property,       // local property
            baz: property,            // local variable

            // Q1:
            // Can I get the property of parent from here? In my case:
            // property: "global property"
            // I want to use some kind of relative addressing, from child to parent not other way like:
            // $.property
            // I've tried:
            // super.property
            // but got errors

            // Q2:
            // Can I get the name of the key in which this block is wrapped? In my case:
            // "nested"
        }
}

Моя цель - получить доступ к родителю от ребенка. Вопросы в комментариях для лучшего понимания контекста. Спасибо

1 Ответ

1 голос
/ 04 мая 2020

Обратите внимание, что super используется для наследования объекта ~ (т. Е. Когда вы расширяете объект base , например, для переопределения некоторых полей, см. https://jsonnet.org/learning/tutorial.html#oo).

Хитрость заключается в том, чтобы подключить локальную переменную, указывающую на self объекта, на который вы хотите сослаться:

{
        local property = "global variable",

        property: "global property",
        bar: self.property,   // global property
        baz: property,        // global variable

        // "Plug" a local variable pointing here
        local this = self,

        nested: {
            local property = "local variable",

            property: "local property",
            bar: self.property,       // local property
            baz: property,            // local variable

            // Use variable set at container obj
            glo1: this.property,
            // In this particular case, can also use '$' to refer to the root obj
            glo2: $.property,
        }
}
...