3

有没有优雅的写作方式

  if o.class == ClassA or o.class == ClassB or o.class == ClassC

我并不是特别想比较类,这只是一个例子,我没有用布尔值做事,所以我不能做类似的事情

  if o.class == (ClassA or ClassB or ClassC)

其他例子是

  if string == "asdf" or string == "1337"

我发现的唯一东西似乎是

  if [ClassA, ClassB, ClassC].include? o.class

或者

  if ["asdf", "1337"].include? string
4

2 回答 2

5

我认为最优雅的解决方案是您已经提供的解决方案,它使用“包含?”。

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

case o
  when ClassA, ClassB, ClassC
  ...

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

class Object
  def in?(array)
    array.include? self
  end
end

然后你可以使用

if o.class.in? [ClassA, ClassB, ClassC]
于 2012-07-17T15:42:38.180 回答
1

怎么样case?这不是一个非常传统的用法,但它肯定更优雅:

case o
when "asdf", "1337"
  puts "Hi!"
when Class1, Class2
  puts "Bye!"
end

因为case使用===which 测试相等和 is a? 关系,并且有一个列表语法,对于这类情况非常优雅。

于 2012-07-17T15:42:48.587 回答