【问题标题】:How to use local variables in arrays?如何在数组中使用局部变量?
【发布时间】:2018-07-06 13:26:59
【问题描述】:

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


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      我刚刚看到文档实际上为此提供了an answer

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-02-12
        • 2018-06-19
        • 2023-03-09
        • 1970-01-01
        • 1970-01-01
        • 2012-12-12
        相关资源
        最近更新 更多