<<
и *
оба являются ключами YAML (их также можно рассматривать как операторы). И еще один ключ, связанный с вашим вопросом: &
.
В YAML вы можете определять якоря и позже использовать их. Например,
foo: &myanchor
key1: "val1"
key2: "val2"
bar: *myanchor
В этом фрагменте кода &
определяет имена якорей, которые myanchor
, а *myanchor
ссылается на этот якорь. Теперь и foo
, и bar
имеют одинаковые ключи и значения.
<<
называется ключом слияния YAML . Вы можете сравнить его с наследованием классов в ООП (не очень точно, но может помочь вам понять). См. Пример ниже.
foo: &myanchor
key1: "val1"
key2: "val2"
bar:
<< : *myanchor
key2: "val2-new"
key3: "val3"
В этом фрагменте кода мы объединяем ключи и значения от foo
до bar
, но переопределяем key2
на новое значение. И мы добавляем новую пару ключ-значение к bar
.
Теперь bar
имеет следующее значение: {"bar": {"key1": "val1", "key2": val2-new", "key3": "val3"}}
.
Надеюсь, это поможет.