2013-01-10 40 views
0

我在閱讀爲什麼是指導,並嘗試在ruby終端的一些命令並排。有一件事不匹配。我正在運行Ruby 1.9.3。Ruby的範圍和三重等於(===)是如何工作的?

在這本書中,它說一個有效的命令是:

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)我會認爲最後兩次執行是相同的,如何有史以來,似乎並非如此。我想知道是否有人能夠更深入地瞭解爲什麼所有這些實驗都失敗了,以及===如何工作。

+1

如果您使用的是非標準方法,如'echo',你應該解釋它做什麼。否則,如果與問題無關,則應清理示例代碼以使其更易於讀者閱讀。 – sawa

+0

@sawa對不起,正在做一些bash。它的意思是打印。任何關於使代碼更加用戶友好的建議或指導將不勝感激。 – Xiv

回答

12

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

請參閱Ruby Operator Precedence

0

這裏的問題似乎是括號。
Ruby無法正確猜測它應該如何評估這條線。

例如下面的工作:

(1895..1913) === 1895