【发布时间】:2019-07-10 12:45:38
【问题描述】:
我正在尝试创建一个具有一些默认值的模板,但如果提供了自定义值文件,则应覆盖这些默认值。问题是对象中的一些变量是从同一对象中的其他变量构建的,例如adjective: 'Good' + self.fruit。这不会被覆盖。
std.mergePatch 不会产生预期的结果,因为它会渲染整个对象(现在我们已经使用了self.fruit),然后覆盖了fruit。
local myobj = {
adjective: 'Good ' + self.fruit.name,
fruit: {
name: 'apple',
qty: 1
},
};
myobj
当什么都没有被覆盖时产生正确的结果:
{
"adjective": "Good apple",
"fruit": {
"name": "apple",
"qty": 1
}
}
但是当我尝试用另一个变量覆盖它时,如果我使用std.mergePatch,它仍然采用默认值,如下所示:
local config = {
fruit: {
name: 'banana',
size: 'large',
},
};
local myobj = {
adjective: 'Good ' + self.fruit.name,
fruit: {
name: 'apple',
qty: 1
},
};
std.mergePatch(myobj, config)
生产(注意adjective 中的水果名称错误):
{
"adjective": "Good apple",
"fruit": {
"name": "banana",
"qty": 1,
"size": "large"
}
}
如果我直接添加这两个对象,它会错过额外的信息:
local config = {
fruit: {
name: 'banana',
size: 'large',
},
};
local myobj = {
adjective: 'Good ' + self.fruit.name,
fruit: {
name: 'apple',
qty: 1
},
};
myobj + config
产生(注意缺少默认的qty: 1):
{
"adjective": "Good banana",
"fruit": {
"name": "banana",
"size": "large"
}
}
如何使用 Jsonnet 实现这一点?
【问题讨论】:
标签: jsonnet