【问题标题】:Reuse a block of code in YAML在 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

【问题讨论】:

    标签: yaml


    【解决方案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 的回答是解决这个问题的更好方法。您可以重复使用整个组,然后覆盖您想要不同的字段(甚至深层字段)。
    猜你喜欢
    • 2017-12-07
    • 2016-10-03
    • 1970-01-01
    • 2019-01-12
    • 2019-04-11
    • 1970-01-01
    • 2015-08-04
    • 2013-12-04
    • 1970-01-01
    相关资源
    最近更新 更多