2

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

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

a我想我可以将第一行与一个结合起来,而不是检查两次a。我正在看类似的东西:

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

2 回答 2

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匹配。

除非您了解正则表达式,否则我不特别建议您这样做,但它可能是检查大量选项的一种非常快速的方法。

于 2013-06-16T04:34:25.070 回答
3

就在这里 :

if %w(new create).include? a
  #code here
else
  #code
end
于 2013-06-16T04:20:07.547 回答