Execute code on descendant class init

I’ve got the following code:

class Main
  @@classes = []
 
  def Main.classes
    @@classes
  end
end

class Root
  Main.classes << self
end

class A < Root
end

class B < Root
end

puts Main.classes.inspect

I’d like Main.classes == [Root, A, B], but currently it only is [Root].
I understand why, but was wondering if there was an elegant way to get
what I’d like to have.

I know in this example, I could simply add “Main.classes << self” to
each subclass, but, hey, that’s way too much repetition for the 21st
century. :slight_smile:

···


Chris
http://clabs.org/blogki

I’ve got the following code:

class Main
@@classes =
def Main.classes
@@classes
end
end

class Root
Main.classes << self
end

class Root
Main.classes << self
def self.inherited(sub_class)
Main.classes << sub_class
end
end

class A < Root
end

class B < Root
end

puts Main.classes.inspect

I’d like Main.classes == [Root, A, B], but currently it only is
[Root]. I understand why, but was wondering if there was an elegant
way to get what I’d like to have.

I know in this example, I could simply add “Main.classes << self” to
each subclass, but, hey, that’s way too much repetition for the 21st
century. :slight_smile:


Chris
http://clabs.org/blogki

Sincerely,
Gennady Bystritsky

···

On Jan 2, 2004, at 21:25, Chris Morris wrote:

Gennady wrote:

class Root
Main.classes << self
def self.inherited(sub_class)
Main.classes << sub_class
end
end

Perfect! Thx.

···


Chris
http://clabs.org/blogki

“Chris Morris” chrismo@clabs.org schrieb im Newsbeitrag
news:3FF65CEC.904@clabs.org

Gennady wrote:

class Root
Main.classes << self
def self.inherited(sub_class)
Main.classes << sub_class
end
end

Perfect! Thx.

I’d just define “inherited” in class Main and not Root.

robert

Robert Klemme wrote:

I’d just define “inherited” in class Main and not Root.

In my example, the subclasses descend from Root, not Main.

···


Chris
http://clabs.org/blogki

“Chris Morris” chrismo@clabs.org schrieb im Newsbeitrag
news:3FFB4EA3.8070201@clabs.org

Robert Klemme wrote:

I’d just define “inherited” in class Main and not Root.

In my example, the subclasses descend from Root, not Main.

Then I’d define the class collection in Root and not Main. My point was
simply to put both into the same class. If you put it into Root you can
even extend the scheme so that for sub classes “inherited” is
automatically defined, in order to make this work recursively.

Regards

robert

Robert Klemme wrote:

In my example, the subclasses descend from Root, not Main.

Then I’d define the class collection in Root and not Main. My point was
simply to put both into the same class. If you put it into Root you can
even extend the scheme so that for sub classes “inherited” is
automatically defined, in order to make this work recursively.

Ah, interesting … I’ll have to look that over (my brain is away from
the problem right now). Thx!

···


Chris
http://clabs.org