在YAML中重用代码块
我想: 但是,这会产生一个错误 是单独锚定每个字段值的唯一方法吗在YAML中重用代码块,yaml,Yaml,我想: 但是,这会产生一个错误 是单独锚定每个字段值的唯一方法吗 来自的示例尝试通过导入重复使用完整组: Defaults: &defaults Company: foo Item: 123 Computer: <<: *defaults Price: 3000 Defaults:&Defaults 公司名称:富 项目:123 计算机: 那么,这两者之间的区别是什么: a: &a item1: value b: *a 以及: a:&a 项目1
来自的示例尝试通过导入重复使用完整组:
Defaults: &defaults
Company: foo
Item: 123
Computer:
<<: *defaults
Price: 3000
Defaults:&Defaults
公司名称:富
项目:123
计算机:
那么,这两者之间的区别是什么:
a: &a
item1: value
b: *a
以及:
a:&a
项目1:价值
b:
我总是忘记这个语法,它有点复杂。有没有文档可以链接到这个?我想看看列表是否有类似的功能。对于一个据说易于阅读和理解的DSL,这种语法是出了名的复杂和不可读。然后你可能会认为阅读文档/规范会把它弄清楚,但不,在试图解读规范的过程中,你会因为剧烈的抓挠而在脑袋上留下一个很深的洞。我甚至会说,如果代码复制更好的话,这将是一个好地方——我一般都讨厌复制。这个答案正好说明了它是如何工作的。使用两个字符并不复杂!一个带有名称的&
用来标记一个节,一个带有相同名称的*
用来回忆它。这很简单。您用&name
标记一行,然后嵌套在该行下面的所有内容都将与*name
一起重用。感谢这篇文章,它非常有用,尽管这些评论说它很复杂…Gabriel的答案是解决这个问题的更好方法。您可以重复使用整个组,然后覆盖希望不同的字段(甚至深字段)。
# sequencer protocols for Laser eye surgery
---
- step: &id001 # defines anchor label &id001
instrument: Lasik 2000
pulseEnergy: 5.4
pulseDuration: 12
repetition: 1000
spotSize: 1mm
- step: &id002
instrument: Lasik 2000
pulseEnergy: 5.0
pulseDuration: 10
repetition: 500
spotSize: 2mm
- step: *id001 # refers to the first step (with anchor &id001)
- step: *id002 # refers to the second step
- step: *id001
- step: *id002
Defaults: &defaults
Company: foo
Item: 123
Computer:
<<: *defaults
Price: 3000
a: &a
item1: value
b: *a
a: &a
item1: value
b:
<<: *a