为什么YAML规范在结肠后要求空间?

时间:2017-02-08 21:44:36

标签: yaml language-design

YAML spec明确指出:

  

映射使用冒号和空格(“:”)来标记每个键:值对。

所以这是合法的:

foo: bar

但是,这不是:

foo:bar

我看到网上很多人都在争论这个空间。我认为他们有一个观点。我自己被它烧了好几次。

为什么空间是强制性的?它背后的设计考虑是什么?

1 个答案:

答案 0 :(得分:12)

很容易错过,因为该规范使用了仅突出显示内部链接的最后一个字符的奇怪惯例,但您引用的部分中的“: ”实际上是一个链接{{3}它回答了你的问题:

  

通常,YAML坚持使用空格将“:”映射值指示符与值分开。这种限制的好处是“:”字符可以在普通标量中使用,只要它后面没有空格。这允许不带引号的URL和时间戳。它也是混淆的潜在来源,因为“a:1”是一个普通的标量,而不是一个关键:价值对。

因此,您可以在不需要任何引用的情况下编写此类列表:

useful_values:
- 2:30
- http://example.com
- localhost:8080

如果空格是可选的,这可能最终变得模棱两可,并被解释为一组键值对。

旁白:以下是JS的一小段内容,使该文档上的链接格式化变得毫无用处。

document.styleSheets[0].insertRule('a[href^="#"] { color: #00A !important; text-decoration: underline !important; background: none !important; }', 0);