2010-01-14 130 views
4

這更多的是語義問題。將變量與Ruby中的兩個不同值進行比較

我想檢查一個變量是否是兩個值之一。最簡單的方法是:

if var == "foo" || var == "bar" 
# or 
if var == 3  || var == 5 

但是這對我來說並不是很乾燥。我知道我可以使用String.match(),但這對於非字符串變量不起作用,速度慢三倍。

有沒有更好的方法檢查變量對兩個值?

回答

14

將所有值放入數組中,然後它應該很容易。

%w[foo bar].include?('foo') # => true 

[3,5].include?(3) # => true 
+1

缺少if語句... if(%w [foo bar] .include?(var)) –

+0

是的,我意識到我幾乎可以在發佈問題時儘快做到這一點。謝謝! – vonconrad

1

你可以這樣做:

%W(foo bar baz).include? var 

或者:

[3, 5].include? var 
5

case聲明似乎做你想要什麼。

case var 
    when "foo", "bar" then case1() 
end 

case var 
    when 3, 5 then case2() 
end 

基於數組的方法似乎可能比這慢。

+0

大小寫符號只是對每個when語句使用'#==='換行,所以這與'if [「foo」,「bar」] === var then case1(); elsif [3,5] === var then case2();結束' – rampion

+0

我試圖測試這個對等效''.include?'方法的速度,'case'稍快。儘管如此,還不足以做出令人信服的論證。 –

+0

這個方法的問題是它比單行'if [1,2] .include?(1)'感覺更笨重。我同意'case'很好地替代了多個if和elsif語句,但不是像這樣簡單的事情。 – vonconrad

相關問題