3

假设您有一个包含多个 OR 的条件,例如

if action == 'new' || action == 'edit' || action == 'update'

另一种写法是:

if ['new', 'edit', 'action'].include?(action)

但这感觉像是编写逻辑的“倒退”方式。

是否有任何内置方法可以执行以下操作:

if action.equals_any_of?('new', 'edit', 'action')

?

更新 - 我非常热衷于这个小片段:

class Object
  def is_included_in?(a)
    a.include?(self)
  end
end

更新 2 - 基于以下评论的改进:

class Object
  def in?(*obj)
    obj.flatten.include?(self)
  end
end
4

3 回答 3

5

使用正则表达式?

action =~ /new|edit|action/

或者:

action.match /new|edit|action/

或者只是编写一个在您的应用程序上下文中具有语义意义的简单实用程序方法。

于 2012-04-30T18:31:01.767 回答
5

另一种方法是

case action
when 'new', 'edit', 'action'
  #whatever
end

您还可以对这样的情况使用正则表达式

if action =~ /new|edit|action/
于 2012-04-30T18:34:12.940 回答
1

您可以将%w符号用于字符串数组:

%w(new edit action).include? action
于 2012-04-30T18:32:32.323 回答