jsonnet - 如何在数组中使用局部变量?
问题描述
我想写一个返回数组的函数。该数组包含对象,其中一些对象需要重用某个对象(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
且无需函数返回对象?
解决方案
当您拥有 时local foo = expr1; expr2
,foo
仅在 中定义expr2
。因此,在您提供的示例中,metadata
仅在数组的第一个元素中可见。而 local 只是一种表达方式。您可以在代码中任何需要表达式的地方使用它,例如42 + (local x = 17 - 3; x + 4)
. in Jsonnetlocal
类似于let ... in ...
Haskell/Ocaml 等。
解决方案是metadata
为整个数组表达式定义,就像在OP's answer中一样。
推荐阅读
- sql - 在 Kylin 中将子查询结果转换为数组
- json - 使用 Optional 管理我的 Hibernate POJO NullPointerException
- java - 我的 Spring MVC 应用程序的较新版本未在 App 引擎上实例化
- html - 如何修复或删除底部多余的黑色空间?iOS
- amazon-web-services - AWS API Gateway 资源 ID 与 Terraform 的映射
- django-models - 编程错误在 /
- python - Pandas Dataframe Groupby 加入字符串,同时保留字符串的顺序
- node.js - Mongoose Populate 不知道如何填充
- javascript - React:将状态传递给兄弟姐妹
- tensorflow - 如何使用自己的图像训练 S3GAN?