在YAML中重用一段代码

ajs*_*sie 61 yaml

我想在YAML中重用哈希:

Defaults: &defaults
  Company: Foo
  Item: 123

Computer: *defaults
  Price: 3000
Run Code Online (Sandbox Code Playgroud)

但是,这会产生错误.

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

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

Computer:
  Company: *company
  Item: *item
  Price: 3000
Run Code Online (Sandbox Code Playgroud)

小智 253

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

Defaults: &defaults
  Company: foo
  Item: 123

Computer:
  <<: *defaults
  Price: 3000
Run Code Online (Sandbox Code Playgroud)

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

  • 这应该是公认的答案 (23认同)
  • 对于据说易于阅读和理解的DSL,此语法非常复杂且难以读取。然后,您会认为阅读文档/规范会清除它,但不,在尝试破译规范时,所有剧烈的刮擦都会使您的脑袋深陷其中。 (3认同)
  • 这个答案准确地展示了它是如何工作的。使用两个角色*并不*复杂!带有名称的“&amp;”用于标记节,带有相同名称的“*”用于调用它。这很简单。您用“&amp;name”标记一行,然后嵌套在该行下方的所有内容都将与“*name”一起重用。感谢这篇文章,它非常有帮助,尽管这些评论说它很复杂...... (3认同)
  • 我总是忘记这种语法,它有点复杂。 (2认同)

zed*_*xff 18

# 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
Run Code Online (Sandbox Code Playgroud)

来自维基百科的样本

  • 加布里埃尔的答案是解决这个问题的更好方法.您可以重用整个组,然后覆盖您希望与之不同的字段(甚至是深字段). (2认同)