2017-05-27 28 views
2

单个n角色在YAML中有什么特别的意义吗?我在问,因为我的Sublime 3文本编辑器使用与其他字符串值不同的颜色突出显示它,我不明白其原因。YAML中单个'n'字符的特殊含义?

enter image description here

+1

这是编写布尔值的方法之一:y,true,yes,on,n,false,no,off。如果你想把它作为一个字符串,你需要引用它。 – jasonharper

回答

1

TL; DR;n是2009年之前在YAML中用于布尔型“假”值的规范表示法。

崇高不应强调,默认情况下为n一直没有自2009年以来曾在YAML这样的表示。如果在所有的,它应该只突出n如果你明确指定通过接口进行编辑YAML 1.1文件,或者如果文档通过文档顶部的指令%YAML 1.1进行识别。


在YAML标量可以具有不同的格式(from the YAML 1.2 specification):

YAML允许定标器以多种格式来呈现。例如,整数“11”也可能写为“0xB”。标签必须指定一种机制,将格式化的内容转换为规范形式以用于相等性测试。像节点样式一样,格式是一个表示细节,并不反映在序列化树和表示图中。

年长1.1规范有不同的第二句那款,那directly mentions booleans

例如,布尔“真”也可以写成“是”。

YAML标量如何在编程语言中构造取决于解析器使用的模式。最基本的模式将每个标量构造为一个字符串(即不解释)。

在更实际的模式中,存在规范形式(通常用于表示计算机编程类型,如整数,布尔值,日期时间戳等)以及允许匹配的标量(通常通过正则表达式)建造这样一个类型。例如,42是规范表示,但在输入端0x2a0o52也被允许用于相同的整数值。

在YAML 1.2 core schemas为布尔值被消毒,以规范化形式truefalse而匹配trueTrueTRUEfalseFalseFALSE —扩展更简单的架构JSON仅允许truefalse

这变为广泛from YAML 1.1其中规范表示是yn同时匹配所有的yYyesYesYESnNnoNoNOtrueTrueTRUEfalseFalseFALSE,on, On, ON,off, Off,OFF。这经常导致混淆,因为程序中的匹配字符串必须在YAML中用明确的引号表示,以便在加载时不被解释为布尔值。

Sublime似乎支持YAML 1.1规范,其中布尔值可写为n。由于YAML 1.2规范是从2009年开始的,我真的不喜欢Sublime这样做,并且不应该将n解释为布尔值,除非YAML文档以明确的指令%YAML 1.1开头。 (既然你没有在界面中给出任何说明,并且由于它不在文档中,我认为你没有)。

当然Sublime的原始版本在YAML 1.2规范之前,但是你希望在8年之后它们会通过更新来纠正它。另一个这样的变化是以0开头的标量,如0123,它们是YAML 1.2中的字符串,但是YAML 1.1中的(八进制)整数。也许你会使用它作为测试来检查YAML模式是否已被正确更新:0123不应在编辑器中突出显示,除非您明确指定了YAML 1.1。

当然,过时的库仅支持YAML 1.1,您甚至可能会使用它,但在编辑器中这不是默认的借口。

+0

你的答案是现货。做了一个快速测试,并且标量'yes','off'和'0123'都以与字符串标量不同的颜色突出显示。它的确看起来似乎是Sublime基于YAML 1.1的突出特点。 – Xukrao

+1

@Xukrao我对Sublime有点了解(自80年代中期以来我一直是emacs用户),他们[自己的语法高亮配置文件](https://www.sublimetext.com/docs/3/syntax.html)来使用'%YAML 1.2'指令。看起来有人错过了YAML 1.1和YAML 1.2之间的真正差异 – Anthon