首页 > 解决方案 > 如何在数组中使用局部变量?

问题描述

我想写一个返回数组的函数。该数组包含对象,其中一些对象需要重用某个对象(metadata在本例中)。这个对象依赖于函数的一个参数,重复它会有点麻烦。

我试过这个:

local fn(name) = [
    local metadata = { name: name };
    { metadata: metadata, value: "foo" },
    { metadata: metadata, value: "bar" },
];

fn("blub")

不幸的是,我收到了这个错误:

STATIC ERROR: example.jsonnet:4:17-24: Unknown variable: metadata

我希望这metadata也可以在第二项中使用。有没有办法解决这个问题而无需重复metadata且无需函数返回对象?

标签: jsonnet

解决方案


当您拥有 时local foo = expr1; expr2foo仅在 中定义expr2。因此,在您提供的示例中,metadata仅在数组的第一个元素中可见。而 local 只是一种表达方式。您可以在代码中任何需要表达式的地方使用它,例如42 + (local x = 17 - 3; x + 4). in Jsonnetlocal类似于let ... in ...Haskell/Ocaml 等。

解决方案是metadata为整个数组表达式定义,就像在OP's answer中一样。


推荐阅读