典型:
Y | N
正则表达式:
Y | Y |是|是| YES | N | N |没有|没有| NO | true | True | TRUE | false | False | FALSE | on | On | ON | off | Off | OFF
定义:
表示true / false值。在没有原生布尔值的语言中 type(例如C)通常使用一个绑定到本机整数类型 为真,零为假。
规范形式:
true
或false
。
这是否意味着1.1中的所有替代形式应该在1.2中被解释为反序列化中的字符串(而不是布尔值)?
答案 0 :(得分:6)
你问了两个不同的问题,所以我将依次回答:
在YAML 1.2中,“on”和“off”是否应被解释为真或假?
不,标量on
和off
应该被解释为字符串(tag:yaml.org,2002:str
)。
这是否意味着1.1中的所有替代形式应该在1.2中被解释为反序列化中的字符串(而不是布尔值)?
其中一些,是的,但有时只是其他人。
值得注意的是,您引用的YAML 1.2规范部分来自10.2 JSON Schema部分。根据其介绍:
JSON模式是大多数现代计算机语言的最低标准,并允许解析JSON文件。因此,YAML处理器应该支持这种模式,至少作为一种选择。强烈建议其他模式应该基于它。
事实上,在使用JSON模式时,只有标量true
和false
是隐式布尔值(tag:yaml.org,2002:bool
)。
但是,规范建议YAML解析器默认使用Core schema,而不是JSON模式。 Core架构是“JSON架构的扩展,允许更多人类可读的相同类型的表示。”
使用Core架构时,标量true
,True
,TRUE
,false
,False
和FALSE
都是布尔值
答案 1 :(得分:4)
在YAML 1.2规范中,它们不再被提及,但我不记得它在任何地方都说它们被移除的原因以及它们是什么。然而在实际情况下,这些额外的“布尔”引起了混乱,这就是猜测为什么它们可能会从规范中删除。
在ruamel.yaml中,我的PyYAML升级(主要是YAML 1.1并支持Yes / No / On / Off)如果YAML文件指定为YAML 1.1(使用加载参数),我只将这些值表示为布尔值或者一个起始行%YAML 1.1
。然后这些标量被解释为字符串。我还没有听到有人抱怨,所以我假设我做的是正确的(即每个人都希望基于1.2规范)的事情; - 。)