YAML包含六种不同类型的上下文。 阻止,阻止,流入,阻止,阻止键,阻止键。 我得到了Block键和Flow键之间的区别,但是我无法 区分其他四个上下文。
我已经在YAML规范中看到了很多示例及其定义,但是我无法正确区分它们。 因此,请通过一些示例说明它们之间的区别,并说明何时将一个上下文转换为另一个上下文。
答案 0 :(得分:0)
您可以在Production parameters下找到对六个不同上下文的简短描述
---
- foo
每个块序列的值都在块内环境中。
此外,顶级节点也处于块入上下文中,尽管您只能从生产207而不是上下文的简短描述中得出。
---
key:
- foo
块映射的值在块外上下文中。这对于缩进非常重要,因此这就是为什么您可以“零缩进”这样的序列(或者为什么将“ count”破折号作为缩进)。
以下是定义此差异的产品: https://yaml.org/spec/1.2/spec.html#seq-spaces(n,c)
[201] seq-spaces(n,c) ::= c = block-out ⇒ n-1
c = block-in ⇒ n
---
foo: bar
块映射中的键位于块键上下文中。
---
{ foo: bar }
流映射中的键位于流键上下文中。
---
{ key: foo }
---
[ foo ]
流集合中的值在流入上下文中。
---
- foo
流集合外部的值在流出上下文中。
似乎上下文可以重叠,并且我同意规范中对此的解释不是很好。只有在解释每个产品时,细节才有意义。
我想这也取决于您需要什么。如果您要实现一个解析器,那么当您理解并实现单个产品时,可能更有意义。
在实现解析器时,请务必使用YAML Test Suite,并在#yaml-dev中的freenode IRC上加入我们。