Ruby Isn';t 00.0与0.0相同吗?

Ruby Isn';t 00.0与0.0相同吗?,ruby,numbers,Ruby,Numbers,我刚刚在编程语言ruby中发现了一个奇怪的问题,这不是什么大问题,但我不明白为什么会发生这种情况。如果有人知道我的问题,我会感兴趣的 在ruby中,您可以编写0或00,这没关系,结果是一样的。 如果运行0===00也会得到true,这意味着两个输入完全相同 0.0也等于0,所以逻辑上00.0也应该等于0.0,但问题是, 如果您尝试使用数字00.0,那么您只会得到一个错误。例如,如果您运行: a = 00.0 您将得到以下错误: 语法错误,意外的tINTEGER 当然我知道这是一个小问题,但正如

我刚刚在编程语言ruby中发现了一个奇怪的问题,这不是什么大问题,但我不明白为什么会发生这种情况。如果有人知道我的问题,我会感兴趣的

在ruby中,您可以编写
0
00
,这没关系,结果是一样的。
如果运行
0===00
也会得到
true
,这意味着两个输入完全相同

0.0
也等于
0
,所以逻辑上
00.0
也应该等于
0.0
,但问题是, 如果您尝试使用数字
00.0
,那么您只会得到一个错误。例如,如果您运行:

a = 00.0
您将得到以下错误:

语法错误,意外的tINTEGER

当然我知道这是一个小问题,但正如我所说的,我想了解为什么计算机不将
00.0
0.0
处理相同?

我在中尝试了“a=00.0”,得到了:

SyntaxError: no .<digit> floating literal anymore put 0 before dot. near line 1: ""
语法错误:否。浮动文字将0置于点之前。第1行附近:“

很明显,Ruby lexer并不期望这种形式的浮点。

问题是,当解析时,Ruby看到一个超过两位数的数字以字符0开头,它将其解析为一个八进制整数。因此,当它解析00时,八进制中的0与十进制中的0相同。但如果它发现了一个错误。那么它是一个无效的整数,这就是它显示的错误。

是00.0,甚至在数学上是合法的吗?它在数学上是合法的。问题是它在ruby中是否合法。我只是做一个评论,因为我没有具体的依据。不过,一个想法是Ruby可能在位级别上计算0===00,但是一旦添加了十进制,计算就作为浮点完成了?在这一点上,00.0不是一个合法的输入,并且可能不等于任何东西,我认为。可能是前面的0将OP认为是浮点的内容转换为八进制文字(类似于C/C++),因此它将其解析为
tINTEGER
而不是
tFLOAT00.
部分仍然很好,Ruby将其视为对Fixnum(singleton)对象
0
的方法调用,并在句点后为方法名指定一个有效符号。例如,
00.class#=>Fixnum
。但是,由于最后一个
0
不是有效符号,因此它是一个语法错误。因此出现了错误消息(OP提供的错误消息比SyntaxError:no.floating literal将0置于点之前更有意义。
)。