【问题标题】:How do I access all the fields of an imported object?如何访问导入对象的所有字段?
【发布时间】:2020-04-09 23:50:28
【问题描述】:
$ cat foo.libsonnet
{
    local foo = 99,
    bar: [ foo, 101 ]
}
$ cat baz.jsonnet
{
    local foo = import 'foo.libsonnet',
    baz: [foo.foo, foo.bar]
}
$ jsonnet baz.jsonnet
RUNTIME ERROR: field does not exist: foo
        baz.jsonnet:3:11-18     thunk <array_element>
        baz.jsonnet:3:10-28     object <anonymous>
        During manifestation

在本例中,很容易访问foobar 字段。 baz.jsonnet有什么办法可以访问foo.libsonnet的本地人吗?

如果答案是否定的,我应该如何实现foobaz,以便我可以在foo.libsonnetbaz.jsonnet 中访问foo.libsonnetfoo 字段?

【问题讨论】:

    标签: jsonnet


    【解决方案1】:

    baz.jsonnet 有什么方法可以访问 foo.libsonnet 的 locals 吗?

    没有。当地人,嗯,当地人。它们只是某些词法范围内可用值的名称。特别是对象局部变量只能在对象定义中直接访问。

    如果你想从对象外部访问一个值,它不应该是一个本地的 - 而是使用一个字段。如果您不希望在显示对象时显示它,可以使用如下隐藏字段:

    $ cat foo.libsonnet
    {
        foo:: 99, // double colon indicates that the field is hidden
        bar: [ self.foo, 101 ]
    }
    $ cat baz.jsonnet
    {
        local foo = import 'foo.libsonnet',
        baz: [foo.foo, foo.bar]
    }
    $ jsonnet baz.jsonnet
    {
       "baz": [
          99,
          [
             99,
             101
          ]
       ]
    }
    $ jsonnet foo.libsonnet
    {
       "bar": [
          99,
          101
       ]
    }
    

    【讨论】:

      【解决方案2】:

      我想出了这个:

      $ cat foo.libsonnet
      {
          foo_parameters: {
              foo: 98
          },
      
          foo_objects: {
              local foo = $.foo_parameters,
      
              bar: [ foo.foo, 101 ]
          }
      }
      $ cat baz.jsonnet
      {
          local foo = import 'foo.libsonnet',
          baz: [foo.foo_parameters.foo, foo.foo_objects.bar]
      }
      $ jsonnet baz.jsonnet
      {
         "baz": [
            98,
            [
               98,
               101
            ]
         ]
      }
      

      This 本质上是同一个问题和答案。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-08-03
        • 1970-01-01
        • 1970-01-01
        • 2020-12-19
        • 1970-01-01
        • 2023-01-09
        相关资源
        最近更新 更多