I'm pretty new to ruby, and just playing around. I can't work out why the
following won't work, though:
1. module TrackInheritors
2. def self.extended(parent)
3. class << parent
4. puts self
5. @@inheritors = []
6.
7. def self.inheritors
8. @@inheritors
9. end
10.
11. def self.inherited(child)
12. @@inheritors << child
13. end
14. end
15. end
16. end
17.
18. class Parent
19. extend TrackInheritors
20. end
21.
22. class Child1 < Parent
23. end
24.
25. class Child2 < Parent
26. end
27.
28. puts Parent.inheritors
29.
30. # -:28: undefined method `inheritors' for Parent:Class
(NoMethodError)
When you open the singleton class of parent, you don't need to define
the methods for "self.", just define them directly, cause you are
already on the singleton class:
module TrackInheritors
def self.extended(parent)
class << parent
puts self
@@inheritors =
def inheritors
@@inheritors
end
def inherited(child)
@@inheritors << child
end
end
end
end
class Parent
extend TrackInheritors
end
class Child1 < Parent
end
class Child2 < Parent
end
puts Parent.inheritors
$ ruby inheritors.rb
#<Class:Parent>
Child1
Child2
I'm not really sure where were you defining those methods, in the
singleton class of the singleton class?
Jesus.
···
On Mon, Jul 26, 2010 at 6:48 AM, Andrew Wagner <wagner.andrew@gmail.com> wrote:
I'm pretty new to ruby, and just playing around. I can't work out why the
following won't work, though:
1. module TrackInheritors
2. def self.extended(parent)
3. class << parent
4. puts self
5. @@inheritors =
6.
7. def self.inheritors
8. @@inheritors
9. end
10.
11. def self.inherited(child)
12. @@inheritors << child
13. end
14. end
15. end
16. end
17.
18. class Parent
19. extend TrackInheritors
20. end
21.
22. class Child1 < Parent
23. end
24.
25. class Child2 < Parent
26. end
27.
28. puts Parent.inheritors
29.
30. # -:28: undefined method `inheritors' for Parent:Class
(NoMethodError)