Ruby - 用于确定对象是否包含在列表中的替代样式?

时间:2012-04-30 18:29:33

标签: ruby

假设您有多个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

3 个答案:

答案 0 :(得分:5)

使用正则表达式?

action =~ /new|edit|action/

或者:

action.match /new|edit|action/

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

答案 1 :(得分:5)

另一种方式是

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

您还可以对此类案例使用正则表达式

if action =~ /new|edit|action/

答案 2 :(得分:1)

您可以对字符串数组使用%w表示法:

%w(new edit action).include? action