结合Ruby中的条件

时间:2013-06-16 04:16:16

标签: ruby-on-rails ruby

有没有更好的方法来写这个?

if a == 'new' || a == 'create'
  ...
else
  ...
end

我没有检查a两次,而是认为我可以将第一行与一个a结合起来。我正在寻找类似的东西:

if a == ['new' || 'create']

2 个答案:

答案 0 :(得分:6)

可以通过多种方式进行测试,但是在单行上进行测试不一定是最好的想法。在Ruby中编写它的最简单方法之一是使用case语句:

case a
when 'new', 'create'
  ...
else
  ...
end

这样做的好处是,您可以通过将其附加到when列表轻松添加其他测试。

你可能会因为正则表达式而变得肮脏:

%w[foo renew new created create].each do |w|
  puts w[/^(?:new|create)$/]
end

哪个会产生如下输出:

# >> 
# >> 
# >> new
# >> 
# >> create

# >>是使用Sublime Text时标记新行的输出。这意味着只有newcreate匹配。

除非你理解正则表达式,否则我不特别推荐它,但它可以是一种非常快速的方法来检查大量的选项。

答案 1 :(得分:3)

是的,有:

if %w(new create).include? a
  #code here
else
  #code
end