0

我正在阅读Why's guide,并并排尝试ruby终端中的一些命令。一件事不符合。我正在运行 Ruby 1.9.3。

在书中它说一个有效的命令是:

if 1890..1913 === 1895
   echo "works"
end

但是,当我这样做时,它只会给我

warning: (irb):27: warning: integer literal in conditional range
=> nil

一些更有趣的实验

1895..1913 === 1895
> ArgumentError: bad value for range
from (irb):31
from /usr/bin/irb:12:in `<main>'

x = 1895..1913
x === 1895
> true

这很有趣,因为(来自 python)我会认为最后两次执行是相同的,但似乎并非如此。我想知道是否有人可以更深入地了解为什么所有这些实验都失败了,以及 === 是如何工作的。

4

2 回答 2

12

1895..1913 === 1895是一样的1895..(1913 === 1895),你想要的是(1895..1913) === 1895

请参阅Ruby 运算符优先级

于 2013-01-10T12:57:37.510 回答
0

这里的问题似乎是括号。
Ruby 无法正确猜测它应该如何评估该行。

例如以下作品:

(1895..1913) === 1895
于 2013-01-10T12:57:45.453 回答