与`Class`对象定义的单例方法混淆

我所知道的单例方法可以由定义它的对象调用。 现在在下面的例子中, C也是Class对象C上定义的Class和singleton方法a_class_method的对象。 那么另一个Class对象D如何能够调用a_class_method

在这个例子中,对象individuation原则如何成立?

 class C end #=> nil def C.a_class_method puts "Singleton method defined on #{self}" end #=> nil C.a_class_method #Singleton method defined on C #=> nil class D  nil D.a_class_method #Singleton method defined on D #=> nil 

好吧,当你做了<你让D级继承自C级,所以D将从C级得到任何东西。如果你想知道所有D的父母是什么,你可以做

 puts "D's parent Classes = #{D.ancestors.join(',')}" 

哪个会给你

 D's parent Classes = D,C,Object,Kernel 

因此,即使D是单个类,它也是C的子类,这使得它可以使用为C定义的方法

a_class_method可用的原因是:

 D.singleton_class.superclass == C.singleton_class # => true