Ruby的范围和三等于(===)如何工作?

时间:2013-01-10 12:55:10

标签: ruby boolean

我正在阅读为什么指南,并在并排尝试红宝石终端中的一些命令。有一点不匹配。我正在运行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)我会认为最后两次执行是相同的,但是,似乎并非如此。我想知道是否有人能够更深入地了解为什么所有这些实验都失败了,以及===如何运作。

2 个答案:

答案 0 :(得分:12)

1895..1913 === 18951895..(1913 === 1895)相同,您想要的是(1895..1913) === 1895

请参阅Ruby Operator Precedence

答案 1 :(得分:0)

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

以下作品例如:

(1895..1913) === 1895