特異メソッド内のクラスは必ず Class クラスになります。
class A def self.print_class puts self #=>A puts self.class #=>Class end def print_class puts self #=><A:0x007effb7e1e868> puts self.class #=>A end end A.new.print_class A.print_class p A.instance_of?(Class) #=>true
この結果を見ると、特異メソッドでは「インスタンスがクラスになっている」ということですね。わかるかな? 「Class クラスのインスタンスは(既存の)クラスである」と。
で、次の結果は有名(?)です。
p Class.instance_of?(Class) #=>true
Class クラスはそのインスタンスとして自分自身を含んでいるわけです。再帰的?
Class クラスの祖先は次のとおりです。
p Class.ancestors #=>[Class, Module, Object, Kernel, BasicObject]
話がちょっとズレますが、メソッド内のクラスを知るには、 self.class
で与えられます。だから、トップレヴェルのメソッド内のクラスを知りたければ、
def a puts self #=>main puts self.class #=>Object end a
となって、Object クラスであることがわかります。ちなみに、この場合の self は main というやつですね。
※参考
class Class (Ruby 2.2.0)