在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