Повторно використовуйте блок коду в YAML


79

Я хочу повторно використовувати хеш у 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

Відповіді:


29
# 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
Відповідь Габріеля - кращий спосіб вирішити цю проблему. Ви можете повторно використовувати цілу групу, а потім замінити поля (навіть глибокі поля), якими ви хочете відрізнятися.
Luca Spiller

288

Спробуйте повторно використати повну групу, імпортуючи її:

Defaults: &defaults
  Company: foo
  Item: 123

Computer:
  <<: *defaults
  Price: 3000

Документація: http://yaml.org/type/merge.html


5
Я завжди забуваю цей синтаксис, він дещо складний.
сайти

Чи існує документація, на яку ви можете посилатися для цього? Я хотів би побачити, чи існує подібна функція для списків.
водонепроникний

8
Для DSL, який нібито легко читати і розуміти, цей синтаксис, як відомо, є складним і нечитабельним. Тоді ви думали б, що читання документів / специфікацій це очистить, але ні, у вас закінчиться глибока діра в голові від усіх інтенсивних подряпин, намагаючись розшифрувати специфікацію.
Крістіан

Я хотів би стверджувати, що це було б місце, де дублювання коду краще - і я ненавиджу дублювання взагалі.
Крістіан

Ця відповідь показує, як саме це працює. А використання двох символів не складне! А &з іменем для позначення розділу та *однойменним для назви. Це дуже просто. Ви позначаєте рядок &name, і все, що вкладено нижче цього рядка, потім використовується повторно *name. Дякую за цей допис, це дуже корисно, незважаючи на ці коментарі, які кажуть, що це складно ...
daevski
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.