<<:YAML中的运算符可用于将一个映射的内容导入另一个映射,类似于**Python中的双splat运算符或...JavaScript中的对象解构运算符.例如,
foo:
a: b
<<:
c: d
e: f
Run Code Online (Sandbox Code Playgroud)
相当于
foo:
a: b
c: d
e: f
Run Code Online (Sandbox Code Playgroud)
当与节点锚一起使用时,这在许多对象中包含一些常见的默认属性时很有用,例如,在Y分钟中学习YAML教程:
Run Code Online (Sandbox Code Playgroud)# Anchors can be used to duplicate/inherit properties base: &base name: Everyone has same name foo: &foo <<: *base age: 10 bar: &bar <<: *base age: 20
但是,我对这种语法的来源或工作原理感到困惑.CTRL+ F荷兰国际集团的YAML规范的<<显示,它不规范的任何地方出现.然而,它至少得到了PyYAML和http://yaml-online-parser.appspot.com/的支持.
这个语法是什么,为什么它似乎没有出现在规范中?
Ant*_*hon 32
它被称为YAML 1.1版的Merge Key Language-Independent Type.并在这里推测
它是解析器可以选择支持的东西,它本质上是对特殊键的键值对的解释<<,其中值是映射(通常通过规范中的别名指示,虽然看起来不像根据需要,不使用别名或映射列表(即映射的别名)没有多大意义,并以特殊方式进行解释.
xdh*_*ore 18
要添加到其他答案:
IMO,“在 Y 分钟内学习 yaml”中的示例不完整,因为它没有显示当键相同时会发生什么。例如:
base: &base
name: Everyone has same name
age: 5
foo: &foo
<<: *base
bar: &bar
<<: *base
age: 20
Run Code Online (Sandbox Code Playgroud)
对于底部的两项产量:
foo:
name: Everyone has same name
age: 5
bar:
name: Everyone has same name
age: 20
Run Code Online (Sandbox Code Playgroud)
bar覆盖年龄,而foo不会。根据规范,合并对象的条目的优先级低于接收它们的对象上的条目。
| 归档时间: |
|
| 查看次数: |
12881 次 |
| 最近记录: |