Confusion with singleton method defined on `Class`

2019-08-03 23:39发布

问题:

What I know singleton methods can be called by the objects, on which it is defined. Now in the below example C is also an object of Class and singleton method a_class_method defined on the Class object C. So how does another Class object D able to call a_class_method?

How does object individuation principle holds in this example?

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

回答1:

well when you did the < you made class D inherit from Class C so D will get anything from class C. If you want to know what all D's parents are you can do

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

which will give you

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

So even though D would be an individual class it is a sub class of C which is what lets it use a method defined for C



回答2:

The reason that a_class_method is available is that:

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


标签: ruby ruby-2.0