Thomas Sawyer wrote in post #956401: > On Oct 22, 3:36pm, Intransition <transf... / gmail.com> wrote: >> > > It should not be. In fact, I think it is a mistake for main to >> > > module Main >> >> > for a minute your objections, but concentrating instead on replicating >> end >> x = Y.new(10) >> y = Y.new(20) >> >> puts x #=> "10" >> puts y #=> "20" >> >> @a = 30 >> >> puts x #=> "30" >> puts y #=> "30" > > My bad, that's not quite right. The @a would be at the class level, > so: > > class X > def self.to_s > @a ||= 10 > end > end > > class Y > def self.to_s > @a ||= 20 > end > end > > puts X #=> "10" > puts Y #=> "20" > > @a = 30 > > puts X #=> "30" > puts Y #=> "30" @Thomas: Dude, instance variables are not inherited in this way. Every object gets its OWN instance variable table, including the Object class. There is no confusion and no mix up, behold: class X def self.to_a @a || = 10 end end class Y def self.to_a @a ||= 20 end end X #=> 10 Y #=> 20 class Object @a = 30 end X #=> 10 Y #=> 20 @a #=> 30 Having the instance variables on the Object class would NOT cause any of the conflicts you guys are talking about :) @Thomas, @Robert, Have you guys checked out 'wrapped loads' ? In my edit to my previous answer I wrote this: "Have you checked out the 'load' function in Ruby? it has a feature called 'wrapped loads' that loads the file into an anonymous module. This means the loaded file cannot affect the global namespace and any constants including classes and modules are trapped within the anonymous module. Just call load with a second argument of anything other than nil." John -- Posted via http://www.ruby-forum.com/.