Что означают &, <<, * в этом файле 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
.