2010-01-14 89 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

相关问题