105

クラスがAあり、Bwhere BinheritsがあるとしAます。親クラス名を印刷するにはどうすればよいですかB

class A
end

class B < A
end

私が試したいくつかのこと

>> B.new.class #=> B   #which is correct
>> B.new.parent  #=> Undefined method `parent`
>> B.parent   #=> Object
>> B.parent.class #=> Class

ありがとう :)

4

6 に答える 6

22

Google が Rails で作業している誰かをここに連れてきた場合、ActiveRecord 継承構造もトラバースするため、代わりに が必要になるbase_class場合があります。superclass

class A < ActiveRecord::Base
end

class B < A
end

> A.superclass
=> ActiveRecord::Base
> B.superclass
=> A

> A.base_class
=> A
> B.base_class
=> A

さらにもっと...

class C < B
end

> C.base_class
=> A

つまり、base_class継承ツリーの最上位を提供しますが、アプリケーションのコンテキストに限定されます。ただし、Rails に関する限り、"あなたのアプリケーション" には使用しているすべての gem が含まれるため、gem で定義された何かをサブクラス化するモデルがある場合、base_classあなたのクラスではなく、gem のクラスが返されます。

于 2015-11-12T19:41:07.530 に答える
19

オブジェクト (インスタンス化されたクラス) を指定すると、親クラスを派生させることができます

>> x = B.new
>> x.class.superclass.name
=>"A"
于 2014-07-11T20:37:44.797 に答える