From: Justin White Date: 2003-01-06T16:11:46+09:00 Subject: Re: should super's position be kept irrelevant? On Sunday, January 5, 2003, at 06:07 , Tom Sawyer wrote: > this is really just a question of taste i think, but i'm wondering if > you > think super's position should be kept irrelevant? in the example below > the > puts @avar will return nil. super has to be placed below @avar = 1 for > it to > return 1. > > class Sup > def initialize > puts @avar > end > end > > class Chi < Sup > def initialize > super # will puts nil > @avar = 1 > # super # would puts 1 > end > end > > the other option to make it irrelevent is: > > class Sup > def initialize > end > def go > puts @avar > end > end > > class Chi < Sup > def initialize > super > @avar = 1 > go > end > end > > of course, now go's position is important, but not super's. which is > preferrable? > to me, that's the least suprising way to work. when you call super before setting the instance variable, the puts of the variable springs it into existence with nil as a value (Perl calls it autovivification i think). the output comes before the setting of the variable, and nothing happens after setting it. in the second setup, super.initialize doesn't DO anything, but #go does, and the instance variable is set BEFORE #go is run. super's position in the second example isn't important because super.initialize is not doing anything ;) -Justin