带有数字的ruby YAML解析错误
我遇到了YAML解析器的一个bug。以这个简单的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开头的数字采用八进制表示法。除非下一个字
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:是的,不是代码,只是一个说明;但我会改变它。是的,我知道它是为了数学等式而不是赋值,它只是看起来很奇怪,不想让其他人感到困惑。如果这是一个开场白问题就好了…)代码>。好吧,我要在这里发疯了。。。八进制符号很糟糕。只是说:)