为什么YAML将'0777'解释为511?
问题描述:
在我YAML文件我有:为什么YAML将'0777'解释为511?
foo:
- '0777'
当我加载在我的代码(result = YAML.load_file(...)
)的文件,我得到
result[:foo] = [511]
这发生在Ubuntu。在Mac上,它是正确的(["0777"]
)。当改为:
foo:
- "'0777'"
它适用于Ubuntu的,但该字符串包含引号:'0777'
。
为什么?
答
在Ruby中的Integer
如果参数字符串,碰巧开始0x
,0b
,0
,它分别解释为十六进制,二进制,八进制字符串。
因此这里0777
被视为一个八进制字符串。由于'0777' octal = '511' decimal
,因此得到511
。
的[为什么YAML.load返回错误的数值?(可能的复制http://*.com/questions/5229919/why-is-yaml-load-returning-the-wrong -numeric-value) – Wolfwyrd
你的Ruby脚本除了加载YAML文件之外还有其他的事情吗?你如何输出结果? –
@Wolfwyrd:不,在这个问题中,YAML文档中有一个整数。在这里,它显然是一个以某种方式被解码为整数的字符串。这与YAML的语义没有任何关系,这只是YAML解码器中的一个错误。 –