在Ruby中将一个变量与两个不同的值进行比较

在Ruby中将一个变量与两个不同的值进行比较,ruby,Ruby,这更像是一个语义问题,而不是其他任何问题 我想检查一个变量是否是两个值之一。最简单的方法是: if var == "foo" || var == "bar" # or if var == 3 || var == 5 但我觉得这个不太干。我知道我可以使用String.match(),但这不适用于非字符串变量,速度慢了三倍 有没有更好的方法对照两个值检查一个变量?将所有值放入一个数组,这样应该很容易 %w[foo bar].include?('foo') # => true [3,

这更像是一个语义问题,而不是其他任何问题

我想检查一个变量是否是两个值之一。最简单的方法是:

if var == "foo" || var == "bar"
# or
if var == 3     || var == 5
但我觉得这个不太干。我知道我可以使用
String.match()
,但这不适用于非字符串变量,速度慢了三倍


有没有更好的方法对照两个值检查一个变量?

将所有值放入一个数组,这样应该很容易

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

[3,5].include?(3) # => true
你可以做:

%W(foo bar baz).include? var
或:


case
语句似乎满足了您的要求

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

case var
  when 3, 5 then case2()
end

基于数组的方法似乎比这慢。

缺少if语句。。。如果(%w[foo-bar].include?(var))是的,我意识到我几乎一发布问题就可以这么做。谢谢case表示法只是对每个when语句使用
#==
,因此这与
if[“foo”,“bar”]==var-then-case1()相同;elsif[3,5]==var-then-case2();结束
我试着测试这个方法与等效的
方法的速度。include?
方法,而
案例
稍微快一点。不过,这还不足以提出令人信服的论点。我对这种方法的问题是,它比[1,2]中的一行
更笨拙。包括?(1)
。我同意
case
可以很好地替代多个if和elsif语句,但不能用于像这样简单的语句。
case var
  when "foo", "bar" then case1()
end

case var
  when 3, 5 then case2()
end