クラスが別のクラスを継承しているかどうかをテストしたいのですが、そのためのメソッドは存在しないようです。
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.ancestors.include? A
これは、B
がB < A
に含まれているため、B.ancestors
の(短い)回答とは少し異なります。
B.ancestors
#=> [B, A, Object, Kernel, BasicObject]
B < B
#=> false
B.ancestors.include? B
#=> true
これが望ましいかどうかは、ユースケースによって異なります。