2015-10-16 97 views
2

在我YAML文件我有:为什么YAML将'0777'解释为511?

foo: 
    - '0777' 

当我加载在我的代码(result = YAML.load_file(...))的文件,我得到

result[:foo] = [511] 

这发生在Ubuntu。在Mac上,它是正确的(["0777"])。当改为:

foo: 
    - "'0777'" 

它适用于Ubuntu的,但该字符串包含引号:'0777'

为什么?

+0

的[为什么YAML.load返回错误的数值?(可能的复制http://stackoverflow.com/questions/5229919/why-is-yaml-load-returning-the-wrong -numeric-value) – Wolfwyrd

+0

你的Ruby脚本除了加载YAML文件之外还有其他的事情吗?你如何输出结果? –

+0

@Wolfwyrd:不,在这个问题中,YAML文档中有一个整数。在这里,它显然是一个以某种方式被解码为整数的字符串。这与YAML的语义没有任何关系,这只是YAML解码器中的一个错误。 –

回答

2

在Ruby中的Integer如果参数字符串,碰巧开始0x0b0,它分别解释为十六进制,二进制,八进制字符串。

因此这里0777被视为一个八进制字符串。由于'0777' octal = '511' decimal,因此得到511

reference

+1

但是'0777'不是一个字符串,而不是一个整数? – pmichna

+1

然后,我应该如何将它放在.yml文件中以使它成为一个字符串? ''''0777'''不是一个好主意,因为那时我得到了字符串中的引号(''0777''),这是我不想要的(我想'0777')。 – pmichna

+0

根据我的理解,它应该被视为字符串,如果你把它放在单引号''''中,如你的例子。只有没有''''我才能重现这个问题。但是,如果情况并非如此,您可以尝试使用双引号'“0777”'。 PS:说实话我在这里疯狂猜测,因为我不能再现这个问题。 – shivam

相关问题