所以,我知道我可以做这样的事情:
sitelist: &sites
- www.foo.com
- www.bar.com
anotherlist: *sites
我有两个列表sitelist
和anotherlist
,它们都包含www.foo.com
和www.bar.com
。然而,我想让anotherlist
也包含www.baz.com
,而不必重复添加www.foo.com
和www.baz.com
。
这样做会在YAML解析器中导致语法错误:
sitelist: &sites
- www.foo.com
- www.bar.com
anotherlist: *sites
- www.baz.com
仅使用锚点和别名似乎无法在不添加另一层子结构的情况下实现我想要的效果,例如:
sitelist: &sites
- www.foo.com
- www.bar.com
anotherlist:
- *sites
- www.baz.com
这意味着使用这个YAML文件的消费者必须意识到它。是否有一种纯YAML方式来做类似于这样的事情?或者我需要使用一些后处理工具,比如实现变量替换或自动提升某些子结构?我已经在处理其他几个用例时进行了这种后处理,所以我并不完全排斥它。但我的YAML文件将由人类编写,而不是机器生成的,因此我希望在标准YAML语法之上尽量减少需要被用户记住的规则数量。
我还希望能够对映射执行类似的操作:
namedsites: &sites
Foo: www.foo.com
Bar: www.bar.com
moresites: *sites
Baz: www.baz.com
我已经在YAML规范中进行了搜索,但没有找到任何信息,所以我怀疑答案只能是“不能这样做”。但如果有人有任何想法,那就太好了。
编辑:由于没有回答,我认为在YAML规范中没有发现我没有发现的任何内容,并且在YAML层面上无法完成此操作。因此,我将问题开放给后处理YAML以帮助解决此问题的想法,以防将来有人发现这个问题。