yaml 文档 中的 & * << 语法
今天看到如下的一个 yaml 文档:
color:
neutral:
white: &color-white '#ffffff'
background:
color:
primary: *color-white
初次见到确实很难以理解,其实 &
和 *
分别是 yaml 规范中的 anchor 和 reference 语法,另外还有一种 extend 语法其语法符号是 <<
。
&, *
类似于 C 语言中的宏定义,上述代码转换为基础的 yaml 语法如下:
color:
neutral:
white: '#ffffff'
background:
color:
primary: '#ffffff'
<<
通常与 &, *
一起使用,类似于 ES6 的 spread 操作符,如:
color:
&color-neutral
neutral:
white: '#ffffff'
default:
green: '#ff0000'
background:
color:
<<: *color-neutral
primary:
black: '#000000'
转换成基础的 yaml 语法如下:
color:
neutral:
white: '#ffffff'
default:
green: '#ff0000'
background:
color:
neutral:
white: '#ffffff'
default:
green: '#ff0000'
primary:
black: '#000000'
<<
还一种 Extend inline 的用法:
color:
<<: &color-neutral
neutral:
white: '#ffffff'
default:
green: '#ff0000'
background:
color:
<<: *color-neutral
primary:
black: '#000000'
转换成基础的 yaml 语法如下:
color:
neutral:
white: '#ffffff'
default:
green: '#ff0000'
background:
color:
neutral:
white: '#ffffff'
primary:
black: '#000000'
此外,关于 YAML 多行字符串的处理,可以参考 [3][4]。
参考资料
[1] YAML - Anchors, References, Extend
https://blog.daemonl.com/2016/02/yaml.html
[2] Online YAML Parser
http://yaml-online-parser.appspot.com/
[3] In YAML, how do I break a string over multiple lines?
https://stackoverflow.com/a/21699210
[4] YAML Multiline
最后修改于 2019-03-19