203

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

development: &default
  adapter: postgresql
  database: dev_development

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


cucumber:
  <<: *test

production:
  <<: *default
  database: test_production
4

5 回答 5

251

标记节点的&别名(在您的示例中&default,将开发节点别名为“default”)并*引用名称为“default”的别名节点。插入该<<:节点的内容。

请允许我在这里引用 YAML 规范:

重复的节点(对象)首先由锚点(用 & 符号标记 - “&”)标识,然后被别名(用星号引用 - “*”)。

所以你的例子的一部分

development: &default
  adapter: postgresql
  database: dev_development

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

实际上扩大到

development: &default
  adapter: postgresql
  database: dev_development

test: &test
  adapter: postgresql       # from the "default" alias
  database: test_test       # overridden by the duplicate key

同时使“test”节点在别名“test”下也可用。

查看YAML 规范 - 2.2 Structures了解更多详细信息(或者如果您甚至需要 moar docs++:3.2.2.2. Anchors and Aliases )

于 2011-07-11T14:14:06.887 回答
19

&default意味着您正在用一些名称标记这组属性以供以后使用

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

于 2011-07-11T14:13:06.110 回答
13

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

自己在线尝试一下。

于 2011-07-11T14:14:16.673 回答
4

它们是一种引用环境的方法,无需一遍又一遍地重复相同的设置(干掉它)。

test: &test
  <<: *default

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

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

cucumber:
  <<: *test

所以现在我们知道cucumber我们要使用test.

于 2011-07-11T14:13:38.263 回答
2

简单来说,这个概念类似于基类和派生类。

在基类模板中,您使用 '&' 提及所有常见细节,这意味着它可用于扩展需要这些字段的其他 yaml 部分。现在,当您创建另一个部分是此“基类”类型结构的配置值的超集时,您可以使用“*”和基类锚(即以“&”开头的锚)。您使用 '<<:' 作为 yaml 概念来实际放置 'base class' 部分,以后可以覆盖它。

vsm:
  stub_nsx_mgr: &MGR_CTRL_STUB
    username: ADMIN
    password: $DEFAULT_PASSWORD
    deployment: ovf
    build: $PR_BUILD
    vmnics:
      - network: $MANAGEMENT_NETWORK_0
    vc: vc_0
    ovf_options:
      - --diskMode=$DISKMODE
      - --deploymentOption=$DEPLOYMENT_OPTION
$MGR_0:
    <<: *MGR_CTRL_STUB
    ovf_path_regex: 'appliance.*\.ovf'
    ovf_options:
      - --diskMode=$DISKMODE
      - --deploymentOption=$DEPLOYMENT_OPTION
$CTRL_0:
    <<: *MGR_CTRL_STUB
    ovf_options:
      - --diskMode=$DISKMODE
      - --allowExtraConfig
$CTRL_1:
    *MGR_CTRL_STUB

但是,如果您不想覆盖扩展字段,您可以跳过 '<<:'

于 2018-02-07T11:35:20.787 回答