From: Gennady Bystritksy Date: 2005-06-07T00:38:19+09:00 Subject: Re: How to call a class method when (i.e. in the moment of) inheriting from a class/defining a descendant? You must keep in mind that a class instance variable is local for the particular class object. In your case, trying to set @x in B does it locally for class B, not affecting @x in class A in any way, even when B inherits from A. You may want to define "attr_writer :x" in class A and use "self.x = 'something'" in class B. Gennady. Thomas wrote: > Hi, > > This problem maybe results from a bad understanding of what I'm trying > to do. Anyway, is it possible to call a method when creating a new class > or inheriting from another class? > > Currently my code looks somehow like this: > > class A > class << self > attr_reader :x > > def prepare > # do something > end > > def fixate > # do something > end > > def foo(a) > # do something with a and @x > end > end > end > > class B < A > prepare > > @x = "something" > > foo("bar") > > def method1 > # do something else > end > > fixate > end > > Now in an ideal world, the definition of class B would be simply: > > class B < A > @x = "something" > > def method1 > # do something > end > end > > and A.setup and A.fixate should be automagically invoked whenever > defining a descendant from class A. > > Does somebody know a solution for how this can be done? The only > possible way of doing this I could come up with is to wrap the > definition part into a block and pass this block to a method that calls > these functions and evaluates the block using class_eval. Something in > the line of (untested): > > class C < A > wrapper do > @x = "something" > > def method1 > # do something > end > end > end > > But I'm not sure if this solution really is an advantage. > > Cheers, > Thomas. > >