Arup Rakshit
Arup Rakshit

Reputation: 118271

Confusion with singleton method defined on `Class` object

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

Upvotes: 1

Views: 154

Answers (2)

Marc-Andr&#233; Lafortune
Marc-Andr&#233; Lafortune

Reputation: 79562

The reason that a_class_method is available is that:

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

Upvotes: 1

fullobs
fullobs

Reputation: 53

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

Upvotes: 1

Related Questions