203

我想测试一个类是否继承自另一个类,但似乎不存在这样的方法。

class A
end

class B < A
end

B.is_a? A 
=> false

B.superclass == A
=> true

我想要的一个简单的实现是:

class Class
  def is_subclass_of?(clazz)
    return true if superclass == clazz
    return false if self == Object
    superclass.is_subclass_of?(clazz)
  end
end

但我希望这已经存在。

4

2 回答 2

384

只需使用<运算符

B < A # => true
A < A # => false

或使用<=运算符

B <= A # => true
A <= A # => true
于 2010-12-28T11:11:45.753 回答
64

也提供:

B.ancestors.include? A

B < A这与因为B包含在(较短的)答案中略有不同B.ancestors

B.ancestors
#=> [B, A, Object, Kernel, BasicObject]

B < B
#=> false

B.ancestors.include? B
#=> true

这是否可取取决于您的用例。

于 2010-12-28T14:26:36.497 回答