2010-11-17 61 views
4

我是Ruby的新手,在Ruby的Poignant指南中遇到問題:Ruby中的整數範圍

此表達式是否返回true?

2005..2009 === 2007

但我不知道爲什麼我從下面的代碼

wishTraditional.rb:4: warning: integer literal in conditional range 

代碼得到這個警告消息:

def makTimeLine(year) 
if 1984 === year 
     "Born." 
elsif 2005..2009 === year 
     "Sias." 
else 
     "Sleeping" 
end 
end 
puts makTimeLine(2007) 

和它返回睡覺,這是錯誤的,應該是Sias

BTW這兩個點是什麼意思?我怎樣才能找到更多關於它的信息?

回答

11

我想你最好使用類似的東西:

elsif (2005..2009).include?(year) 

這裏是文檔中關於Ruby ranges

更新:如果你堅持使用===,你應該用括號括起來的範圍:

elseif (2005...2009) === year 
+1

感謝Baramin,我剛弄明白我自己,這是覆蓋在前面的章節中,我跳過。我不會再跳過章節! – mko 2010-11-17 14:59:17

+0

這是因爲運算符的優先級:'==='在'...'之前綁定。 http://stackoverflow.com/a/14258487/1400991 – 2014-12-23 14:43:48

3

對於獨立表達式,是的,您需要將範圍文字放在括號內。 但是你如果/ ELSIF鏈會比較像一個case語句,它使用===清潔:

def makTimeLine(year) 
    case year 
    when 1984 
    "Born." 
    when 2005..2009 
    "Sias." 
    else 
    "Sleeping" 
    end 
end