Skip to content

YAML – 完整示例

此示例演示了 YAML 的多项特性,包括嵌套结构、锚点 (&)、别名 (*) 和合并键 (<<)。这些特性对于创建可维护且简洁的配置文件非常有用。锚点和别名有助于避免重复,而合并键则允许从文档的其他部分继承属性。

考虑以下用于不同环境的数据库设置的 YAML 配置:

defaults: &defaults
adapter: postgresql
host: localhost
pool: 5
development:
database: myapp_development
<<: *defaults # Merge the 'defaults' here
test:
database: myapp_test
<<: *defaults # Merge the 'defaults' here
pool: 2 # Override the 'pool' value from defaults
production:
database: myapp_production
adapter: postgresql
host: prod-db.example.com
pool: 50

我们来分解一下这个示例:

  • &defaults: 这是一个名为 ‘defaults’ 的锚点。它将跟随其后的映射(adapter、host、pool)标记为一个可重用块。
  • *defaults: 这是一个别名。它引用锚定在 ‘defaults’ 处的内空。
  • <<: *defaults: 这是一个合并键。它指示 YAML 解析器将别名引用的 ‘defaults’ 映射中的键值对合并到当前映射(‘development’ 和 ‘test’)中。如果发生冲突(例如,‘test’ 中的 ‘pool: 2’ 覆盖了 ‘defaults’ 中的 ‘pool: 5’),则当前映射中的键将覆盖合并映射中的键。

当此 YAML 被解析时,它有效地展开为以下数据结构(概念上类似于 JSON):

{
"defaults": {
"adapter": "postgresql",
"host": "localhost",
"pool": 5
},
"development": {
"database": "myapp_development",
"adapter": "postgresql",
"host": "localhost",
"pool": 5
},
"test": {
"database": "myapp_test",
"adapter": "postgresql",
"host": "localhost",
"pool": 2
},
"production": {
"database": "myapp_production",
"adapter": "postgresql",
"host": "prod-db.example.com",
"pool": 50
}
}

此示例展示了如何利用 YAML 的结构和可重用性特性来创建复杂但易读的配置。