如何访问导入对象的所有字段?
How do I access all the fields of an imported object?
$ 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
在这个例子中,很容易访问foo
的bar
字段。 baz.jsonnet
有什么方法可以访问 foo.libsonnet
的本地人吗?
如果答案是否定的,我应该如何实现 foo
和 baz
以便我可以在 foo.libsonnet
中访问 foo.libsonnet
的 foo
字段] 以及 baz.jsonnet
?
我想到了这个:
$ 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本质上是同一个问题和答案。
Is there any way for baz.jsonnet to access the locals of foo.libsonnet?
没有。当地人就是当地人。它们只是某些词法范围内可用值的名称。特别是对象局部变量只能在对象定义中直接访问。
如果你想从对象外部访问一个值,它不应该是一个本地值 - 而是使用一个字段。如果您不想在显示对象时显示它,您可以使用隐藏字段,如下所示:
$ 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
]
}
$ 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
在这个例子中,很容易访问foo
的bar
字段。 baz.jsonnet
有什么方法可以访问 foo.libsonnet
的本地人吗?
如果答案是否定的,我应该如何实现 foo
和 baz
以便我可以在 foo.libsonnet
中访问 foo.libsonnet
的 foo
字段] 以及 baz.jsonnet
?
我想到了这个:
$ 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本质上是同一个问题和答案。
Is there any way for baz.jsonnet to access the locals of foo.libsonnet?
没有。当地人就是当地人。它们只是某些词法范围内可用值的名称。特别是对象局部变量只能在对象定义中直接访问。
如果你想从对象外部访问一个值,它不应该是一个本地值 - 而是使用一个字段。如果您不想在显示对象时显示它,您可以使用隐藏字段,如下所示:
$ 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
]
}