testing一个Ruby类是否是另一个类的子类

我想testing一个类是否从另一个类inheritance,但似乎没有一个方法。

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 

但我希望这已经存在。

只需使用<运算符

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

或者使用<=运算符

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

也提供:

 B.ancestors.include? A 

这与B < A答案略有不同,因为B包含在B.ancestors

 B.ancestors #=> [B, A, Object, Kernel, BasicObject] B < B #=> false B.ancestors.include? B #=> true 

这是否可取取决于您的使用情况。