为什么YAML会解释' 0777'作为511?

时间:2015-10-16 10:33:08

标签: ruby yaml

在我的YAML文件中,我有:

foo:
  - '0777'

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

result[:foo] = [511]

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

foo:
  - "'0777'"

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

为什么?

1 个答案:

答案 0 :(得分:2)

在Ruby中Integer如果参数是字符串,并且恰好以0x0b0开头,则将其解释为十六进制,二进制,八进制字符串分别

因此,0777被视为八进制字符串。自'0777' octal = '511' decimal开始,您的结果为511

reference