在 YAML 中重用代码块
Posted
技术标签:
【中文标题】在 YAML 中重用代码块【英文标题】:Reuse a block of code in YAML 【发布时间】:2012-01-17 23:15:45 【问题描述】:我想reuse a hash in YAML:
Defaults: &defaults
Company: Foo
Item: 123
Computer: *defaults
Price: 3000
但是,这会产生错误。
是单独锚定每个字段值的唯一方法like this吗?
Defaults:
Company: &company Foo
Item: &item 123
Computer:
Company: *company
Item: *item
Price: 3000
【问题讨论】:
【参考方案1】:尝试通过导入重用整个组:
Defaults: &defaults
Company: foo
Item: 123
Computer:
<<: *defaults
Price: 3000
文档:http://yaml.org/type/merge.html
【讨论】:
我总是忘记这个语法,有点复杂。 有没有可以链接到的文档?我想看看列表是否有类似的功能。 对于一个据说易于阅读和理解的 DSL,这种语法是出了名的复杂和不可读。然后你会认为阅读文档/规范会清除它,但不,你最终会在试图破译规范时因为所有强烈的抓挠而在你的头上留下一个深洞。 我什至认为这将是一个代码重复更好的地方 - 我一般讨厌重复。 这个答案确切地显示了它是如何工作的。而且使用两个字符并不复杂!一个&
用一个名字标记一个部分,一个*
用相同的名字召回它。这很简单。你用&name
标记一行,然后嵌套在该行下面的所有内容都用*name
重用。感谢这篇文章,它很有帮助,尽管这些 cmets 说它很复杂......【参考方案2】:
# 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
来自wikipedia的样本
【讨论】:
Gabriel 的回答是解决这个问题的更好方法。您可以重复使用整个组,然后覆盖您想要不同的字段(甚至深层字段)。以上是关于在 YAML 中重用代码块的主要内容,如果未能解决你的问题,请参考以下文章