这个database.yml文件中的&,<<,*是什么意思?

Ope*_*erX 145 alias yaml database-connection ruby-on-rails cross-reference

到目前为止,我只使用了database.yml,每个参数都显式调出,在下面的文件中使用了一些我不理解的字符.每行和符号(&,*,<<)的含义是什么,我如何阅读此文件?

development: &default
  adapter: postgresql
  database: dev_development

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


cucumber:
  <<: *test

production:
  <<: *default
  database: test_production
Run Code Online (Sandbox Code Playgroud)

pau*_*kul 172

&标志为节点的别名(在你的榜样&default别名发展节点作为"默认")和*引用名为"默认"的别名节点.所述<<:插入该节点的内容.

请允许我在此引用YAML规范:

重复节点(对象)首先由锚点标记(用&符号标记 - "&"),然后别名(用星号 - "*"引用).

所以你的例子的一部分

test: &test
  <<: *default
Run Code Online (Sandbox Code Playgroud)

实际上扩展到

test: &test
  adapter: postgresql       # from the "default" alias
  database: dev_development # from the "default" alias
Run Code Online (Sandbox Code Playgroud)

同时使别名"test"下的"test"节点可用.看看YAML规范 - 2.2结构了解更多细节(或者如果你甚至需要moar docs ++:3.2.2.2.锚和别名)

  • 好奇:"test"扩展为测试:&test adapter:postgresql#来自"默认"别名数据库:dev_development#来自"默认"别名数据库:test_test要完全准确.第二个"数据库"是否覆盖从"*default"引用的数据库? (2认同)
  • @Gripp是的,在`&lt;&lt;:* default`之后声明的数据库密钥会覆盖它。使用[YAML](https://ruby-doc.org/stdlib/libdoc/yaml/rdoc/YAML.html)会产生`{“ development” =&gt; {“ adapter” =&gt;“ postgresql”,“ database” = &gt;“ dev_development”},“ test” =&gt; {“ adapter” =&gt;“ postgresql”,“ database” =&gt;“ test_test”}}`` (2认同)

key*_*one 9

&default 表示您使用某个名称标记这组属性以供以后使用

<<: *default 表示您包含标记为默认值的组中的所有属性


Sam*_*uby 9

这些表示节点引用(*)和关联数组合并(<<),它们引用标有锚(&)标记的节点 - 维基百科

在线尝试一下.


the*_*gah 5

它们是一种参考环境的方法,而无需一遍又一遍地重复相同的设置(干燥)。

test: &test
  <<: *default
Run Code Online (Sandbox Code Playgroud)

&test创建对这些特定设置的引用。

<<: *default说使用默认设置进行测试

cucumber:
  <<: *test
Run Code Online (Sandbox Code Playgroud)

现在我们知道cucumber我们想要使用 中的设置test