4

如何附加到现有列表?

这是无效的:

local list = ['a', 'b', 'c'];

local list = list + ['e'];
4

1 回答 1

6

您所经历的是由于本地人在 jsonnet 中递归。因此,local list = list + ['e']右侧的列表与左侧的列表相同,当您尝试评估它时会导致无限递归。

所以这将像你期望的那样工作:

local list = ['a', 'b', 'c'];
local list2 = list + ['e'];

这次它正确地引用了先前定义的列表。

如果你想知道为什么它是这样设计的,它很有用,因为你可以编写递归函数:

local foo(x) = if x == 0 then [] else foo(x - 1) + [x];
foo(5)

这与写作完全相同:

local foo = function(x) if x == 0 then [] else foo(x - 1) + [x];
foo(5)
于 2018-09-28T00:01:44.720 回答