5

我有一个字符串变量,它只能包含 6 个不同的值。我想检查它是否包含前 4 个值之一或 2 个第二个值之一。

有没有比这更优雅的方法:

if string.eql? 'val1' || string.eql? 'val2' || string.eql? 'val3' || string.eql? 'val4'
  ...
elsif string.eql? 'val5' || string.eql? 'val6'
  ...
end

也许像if string is in ['val1', 'val2', 'val3', 'val4']什么?

4

3 回答 3

17

你可以使用include?

if ['val1', 'val2', 'val3', 'val4'].include?(string)
于 2013-07-08T12:40:02.637 回答
1
case string
when *%w[val1 val2 val3 val4]
  ...
else
  ...
end
于 2013-07-08T12:49:30.007 回答
0

Array#index

返回 ary 中第一个对象的索引,使得该对象 == 到 obj。如果未找到匹配项,则返回 nil。

puts "something" if ['val1', 'val2', 'val3', 'val4'].index("val1")
# >> something
于 2013-07-08T12:42:46.433 回答