在 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,这种语法是出了名的复杂和不可读。然后你会认为阅读文档/规范会清除它,但不,你最终会在试图破译规范时因为所有强烈的抓挠而在你的头上留下一个深洞。 我什至认为这将是一个代码重复更好的地方 - 我一般讨厌重复。 这个答案确切地显示了它是如何工作的。而且使用两个字符并不复杂!一个&amp; 用一个名字标记一个部分,一个* 用相同的名字召回它。这很简单。你用&amp;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 中重用代码块的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Swift / Xcode 12.3 中重用代码块进行闭包

javascript 使用export重用代码块

使用空合并运算符重用的原子代码块

JavaScript函数—可重用的代码块

java代码块

java代码块