重用YAML中的代码块


77

我想重用YAML中的哈希

Defaults: &defaults
  Company: Foo
  Item: 123

Computer: *defaults
  Price: 3000

但是,这会产生错误。

是分别定位每个字段值的唯一途径是这样

Defaults:
  Company: &company Foo
  Item: &item 123

Computer:
  Company: *company
  Item: *item
  Price: 3000

Answers:


28
# 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

维基百科样本


4
Gabriel的答案是解决此问题的更好方法。您可以重用整个组,然后覆盖您想要不同的字段(甚至是深字段)。
卡·斯皮勒

282

尝试通过导入来重用完整的组:

Defaults: &defaults
  Company: foo
  Item: 123

Computer:
  <<: *defaults
  Price: 3000

文档:http: //yaml.org/type/merge.html


5
我总是忘记这种语法,它有点复杂。
网站

您是否可以为此链接文档?我想看看列表是否有类似功能。
防水

7
对于据说易于阅读和理解的DSL,此语法非常复杂且难以读取。然后,您会认为阅读文档/规范会清除它,但是,不可以,在尝试破译规范时,所有剧烈的刮擦都会使您的头陷入深渊。
基督徒

我什至会争辩说,这将是代码重复更好的地方-我通常讨厌重复。
基督徒

该答案准确显示了它的工作原理。而且使用两个字符并不复杂!一个&使用一个名称来标记部分和*具有相同名称的回忆吧。那很简单。您用标记了一条线&name,然后嵌套在该线下的所有内容都用重复使用*name。感谢这篇文章,尽管这些评论说它很复杂,但它还是很有帮助的
daevski
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.