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いるため、の(短い)回答とは少し異なります。BB.ancestors

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

B < B
#=> false

B.ancestors.include? B
#=> true

これが望ましいかどうかは、ユースケースによって異なります。

于 2010-12-28T14:26:36.497 に答える