我刚刚在编程语言ruby中发现了一个奇怪的问题,这不是一个大问题,但我只是无法理解它为什么会发生。如果有人知道我的问题的问题,我会感兴趣。
在红宝石中你可以写0
或00
,这无关紧要,它会得到相同的结果。
如果您运行0 === 00
,您还会得到true
,这意味着两个输入完全相同。
0.0
也等于0
,因此逻辑上00.0
也应该等于0.0
,但问题是,
如果您尝试使用数字00.0
,那么您将收到错误。如果您运行例如:
a = 00.0
您收到此错误:
语法错误,意外的tINTEGER
当然我知道这是一个小问题,但正如我所说,我想了解为什么计算机不会将00.0
与0.0
一样对待?
答案 0 :(得分:4)
问题在于,当解析和ruby看到一个数字超过两位的数字以字符0开头时,它会将其解析为八进制整数。因此,当它解析00时,它在八进制中为0,与十进制中的0相同。但如果它找到了。那么它是一个无效的整数,这就是它显示的错误。
答案 1 :(得分:1)
我在http://tryruby.com尝试了“a = 00.0”,得到了:
SyntaxError: no .<digit> floating literal anymore put 0 before dot. near line 1: ""
显然,Ruby lexer并不期望浮动形式。