一位同事推动我在教程的面向对象部分提到这一点:
让我们通过混合从一个模板中提取一些非常相似的鸡尾酒来使其更加具体,从而得出它们的相似之处。+
运算符实际上隐含在这些示例中。在您编写的常见情况下foo + { ... }
,即 the+
后面紧跟 a {
,则+
可以省略 the 。尝试在下面的 4 种情况下明确添加+
。
local templates = import 'templates.libsonnet';
{
// The template requires us to override
// the 'spirit'.
'Whiskey Sour': templates.Sour {
spirit: 'Whiskey',
},
// Specialize it further.
'Deluxe Sour': self['Whiskey Sour'] {
// Don't replace the whole sweetner,
// just change 'kind' within it.
sweetener+: { kind: 'Gomme Syrup' },
},
Daiquiri: templates.Sour {
spirit: 'Banks 7 Rum',
citrus+: { kind: 'Lime' },
// Any field can be overridden.
garnish: 'Lime wedge',
},
"Nor'Easter": templates.Sour {
spirit: 'Whiskey',
citrus: { kind: 'Lime', qty: 0.5 },
sweetener+: { kind: 'Maple Syrup' },
// +: Can also add to a list.
ingredients+: [
{ kind: 'Ginger Beer', qty: 1 },
],
},
}
所以,隐式对象组合:
- 是合法的
- 已记录,但似乎仅在教程和正式规范中,目前不在语言参考中
- 具有与 相同的行为
+
,除了它仅在第二个操作数以 a 开头时可用{
,而不是在它是变量时可用。