Ruby:优雅的方式来编写`if o.class == ClassA或o.class == ObjectB或o.class == ObjectC`

Jon*_*ung 3 ruby if-statement

是否有一种优雅的写作方式

  if o.class == ClassA or o.class == ClassB or o.class == ClassC
Run Code Online (Sandbox Code Playgroud)

我不是特意想要比较课程,这只是一个例子,我没有用布尔做事,所以我做不了类似的事情

  if o.class == (ClassA or ClassB or ClassC)
Run Code Online (Sandbox Code Playgroud)

其他例子是

  if string == "asdf" or string == "1337"
Run Code Online (Sandbox Code Playgroud)

我发现的唯一的东西似乎是

  if [ClassA, ClassB, ClassC].include? o.class
Run Code Online (Sandbox Code Playgroud)

要么

  if ["asdf", "1337"].include? string
Run Code Online (Sandbox Code Playgroud)

小智 5

我认为最优雅的解决方案是你已经提供的解决方案,即使用'include?'.

只是为了多样化,您还可以选择在以下情况下使用案例:

case o
  when ClassA, ClassB, ClassC
  ...
Run Code Online (Sandbox Code Playgroud)

另一种选择,我认为它比'包含'更具可读性?是创建自己的'in?',例如:

class Object
  def in?(array)
    array.include? self
  end
end
Run Code Online (Sandbox Code Playgroud)

然后你可以使用

if o.class.in? [ClassA, ClassB, ClassC]
Run Code Online (Sandbox Code Playgroud)