带有数字的ruby YAML解析错误

带有数字的ruby YAML解析错误,ruby,yaml,Ruby,Yaml,我遇到了YAML解析器的一个bug。以这个简单的yaml文件为例: new account: - FLEETBOSTON - 011001742 如果使用以下ruby代码行对其进行解析: INPUT_DATA = YAML.load_file("test.yml") 然后我把这个拿回来: {"new account"=>["FLEETBOSTON", 2360290]} 我做错什么了吗?因为我很确定这是不应该发生的。这是应该发生的。以0开头的数字采用八进制表示法。除非下一个字

我遇到了YAML解析器的一个bug。以这个简单的yaml文件为例:

new account:
  - FLEETBOSTON
  - 011001742
如果使用以下ruby代码行对其进行解析:

INPUT_DATA = YAML.load_file("test.yml")
然后我把这个拿回来:

{"new account"=>["FLEETBOSTON", 2360290]}

我做错什么了吗?因为我很确定这是不应该发生的。

这是应该发生的。以
0
开头的数字采用八进制表示法。除非下一个字符是
x
,在这种情况下,它们是十六进制的

07 == 7
010 == 8
011 == 9

0x9 == 9
0xA == 10
0xF == 15
0x10 == 16
0x11 == 17
进入
irb
,只需输入
011001742

1.9.2-p290 :001 > 011001742
 => 2360290 
PEBKAC.:)

你的号码是一个号码,所以它被视为一个号码。如果您想让它显式地成为一个字符串,请将它括在引号中,这样YAML就不会试图让它成为一个数字

new account:
  - FLEETBOSTON
  - '011001742'

使用
=
而不是
=
进行代码格式化可能会被错误地解释为赋值(这是不可能的,因为数字不是左值)。@AndrewMarshall:是的,不是代码,只是一个说明;但我会改变它。是的,我知道它是为了数学等式而不是赋值,它只是看起来很奇怪,不想让其他人感到困惑。如果这是一个开场白问题就好了…)。好吧,我要在这里发疯了。。。八进制符号很糟糕。只是说:)