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

Vit*_*liy 14 yaml language-design

YAML规范明确规定:

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

所以这是合法的:

foo: bar
Run Code Online (Sandbox Code Playgroud)

但是,这不是:

foo:bar
Run Code Online (Sandbox Code Playgroud)

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

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

IMS*_*SoP 15

它很容易被遗漏,因为该规范使用了仅突出显示内部链接的最后一个字符的奇怪惯例,但“: ”您引用的部分实际上是指向规范的另一部分的链接,它回答了您的问题:

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

因此,动机是您可以编写此类列表而无需任何引用:

useful_values:
- 2:30
- http://example.com
- localhost:8080
Run Code Online (Sandbox Code Playgroud)

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

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

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

  • 我想知道为什么 http://www.yamllint.com/ 违反规范并说“key:value”是有效的 yaml 语法。 (3认同)
  • 哇!他们非常偷偷摸摸。谢谢。 (2认同)
  • 我们只是通过使用自定义函数预处理所有 YAML 输入文本来打破这一规范,并打破缩进始终由空格组成的要求。它只需要大约 20 行代码,天哪,为了消除我们客户编写 YAML 的麻烦,这值得吗? (2认同)