Что означают &, <<, * в этом файле database.yml?

До сих пор я только использовал database.yml с каждым параметром, вызывается явно, в файле ниже он использует некоторые символы, которые я не понимаю. Что означает каждая строка и символ (&, *, < <), как я могу прочитать этот файл?

development: &default
  adapter: postgresql
  database: dev_development

test: &test
  <<: *default
  database: test_test


cucumber:
  <<: *test

production:
  <<: *default
  database: test_production

Ответ 1

& обозначает псевдоним для node (в вашем примере &default aliases разрабатывает node как "default" ), а * ссылается на псевдоним node с именем "default", <<: вставляет содержимое этого node.

Позвольте мне привести спецификацию YAML здесь:

Повторяющиеся узлы (объекты) сначала идентифицируются якорем (помечены амперсандом - "&" ) и затем затем псевдонимы (со ссылкой на звездочку - "*" ) после этого.

поэтому части вашего примера

test: &test
  <<: *default

действительно расширяется до

test: &test
  adapter: postgresql       # from the "default" alias
  database: dev_development # from the "default" alias

и в то же время сделать "тест" node, также доступный под псевдонимом "тест". посмотрите спецификацию YAML - 2.2 Структуры для получения дополнительной информации (или если вам нужны даже документы moar ++: 3.2.2.2 Анкеры и псевдонимы)

Ответ 2

&default означает, что вы присвоили этому набору атрибутов некоторое имя для последующего использования

<<: *default означает, что вы включаете все атрибуты из группы, помеченной как по умолчанию

Ответ 3

Они представляют node ссылки (*), а ассоциативный массив объединяется (< <), которые относятся к значению node с меткой привязки (&) - wikipedia

Попробуйте сами online.

Ответ 4

Это способ справиться с окружающими средами, не повторяя одни и те же настройки снова и снова (DRY).

test: &test
  <<: *default

&test создает ссылку на эти конкретные настройки.

<<: *default говорит, что используют настройки по умолчанию для теста

cucumber:
  <<: *test

Итак, теперь мы знаем, что для cucumber мы хотим использовать настройки из test.