2

我想写一个返回数组的函数。该数组包含对象,其中一些对象需要重用某个对象(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且无需函数返回对象?

4

2 回答 2

2

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

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

于 2018-07-07T12:40:49.453 回答
0

我刚刚看到文档实际上为此提供了答案

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

fn("blub")
于 2018-07-06T13:48:26.497 回答