2011-06-22 27 views
0

は一例であり:匿名クラスここ

class A 
    class << self 
    p superclass 
    end 
end 

a = A.new 

class << a 
    p superclass 
end 

このコード印刷:

#<Class:Object> 
A 

なぜ代わり

Class 
A 

印刷ラインの

#<Class:Object> 
A 

匿名クラスの場合

class << self 
    p superclass 
    end 

スーパークラスは、私は私が正しく質問を理解している場合は100%を確認していないクラス

+0

シングルトンメソッドを含むことができるメタクラスは、クラスAのprint nilで 'Class.new do#.. ' – Kudu

答えて

1

です。私が誤解した場合に備えて、それを言い直してください。

superclassを呼び出すとオブジェクト(この場合はClass)が返されます。 Rubyではすべてがオブジェクトです。私の知る限り、これは正しい行動です。

クラスの名前のみを表示する場合は、p superclass.nameに電話してください。

superclassを呼び出すと、nilを返すことができます。あなたがするとき:class << a、あなたはa新しいメソッド(this reading about classes, objects and modulesを見て)で拡張されています。 aObject(クラスAのインスタンス)なので、スーパークラスはありません。Objectは階層ツリーの先頭です。クラスAにはスーパークラス(クラス名はClass)がありますが、Aというインスタンスはありません。

+0

p superclass.nameを使って定義された匿名クラスと全く同じではないことに注意してください。コードclass << a p superclass.name end "A"を印刷します。どうして? – user413881

関連する問題