Ruby中的Comibine条件

Vic*_*tor 2 ruby ruby-on-rails

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

if a == 'new' || a == 'create'
  ...
else
  ...
end
Run Code Online (Sandbox Code Playgroud)

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

if a == ['new' || 'create']
Run Code Online (Sandbox Code Playgroud)

the*_*Man 6

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

case a
when 'new', 'create'
  ...
else
  ...
end
Run Code Online (Sandbox Code Playgroud)

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

你可以用正则表达式来贬低和肮脏:

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

哪个会产生如下输出:

# >> 
# >> 
# >> new
# >> 
# >> create
Run Code Online (Sandbox Code Playgroud)

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

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