我想做以下事情:
main.jsonnet
local data = import 'data.libsonnet';
{
["build:"+client]: {
variables: data.getVariables(client, "build")
}
for client in data.clients
}
data.libsonnet
getVariables(client, stage) ::
{
local neededVars =
if stage == "build" then ["var1", "var2"]
else if stage == "test" then ["var2"]
else []
[varName]: $.dict[client][varName]
for varName in neededVars
}
dict:: {
"customer1": { "var1: "value", "var2": "value2" }
}
但问题是,无论我试图编码对neededVars
的引用(也尝试使用self.
),我得到Error: Unknown Variable
。如果我返回一个对象而不是一个数组,例如。
getVariables(client, stage) ::
{
local neededVars =
if stage == "build" then ["var1", "var2"]
else if stage == "test" then ["var2"]
else []
variables: {
[varName]: $.dict[client][varName]
for varName in neededVars
}
}
则该局部变量是可访问的。但是,当然,输出不是想要的。
你能告诉我,为什么这个变量是无法访问如果我想返回一个数组和语法来访问它如何?
非常感谢!
几乎可以在任何地方定义局部,但在推导式的上下文中无法访问它。我无法解释原因,但我的假设是外部作用域的定义还不完整,所以局部作用域对理解程序是不可见的。
如果您尝试将其移出对象但仍在函数内会发生什么?
getVariables(client, stage) ::
local neededVars =
if stage == "build" then ["var1", "var2"]
else if stage == "test" then ["var2"]
else [];
{
variables: {
[varName]: $.dict[client][varName]
for varName in neededVars
}
}
这样,局部对象就在对象定义的作用域之外,但仍然在函数作用域中,并且传递的形参是可访问的。