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

时间:2013-03-14 20:22:59

标签: ruby ruby-2.0

我所知道的单例方法可以由定义它的对象调用。现在,在下面的示例中,C也是Class对象a_class_method上定义的Class和单例方法C的对象。那么另一个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 < C
end
#=> nil

D.a_class_method
#Singleton method defined on D
#=> nil

2 个答案:

答案 0 :(得分:1)

当你做&lt;你让D级继承了C级,所以D会从C级得到任何东西。如果你想知道D的父母是什么,你可以做什么

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

会给你

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

所以即使D是一个单独的类,它也是C的一个子类,它允许它使用为C定义的方法

答案 1 :(得分:1)

a_class_method可用的原因是:

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