From: Gennady Date: 2004-04-10T05:44:54+09:00 Subject: Re: Cache of objects rolo wrote: >>>class Thing >>> @cache = {} >>> def self.instance(name) >>> @cache[name] ||= new(name) >>> end >>> def initialize(name) >>> @name = name >>> end >>>end >>> >>>t1 = Thing.instance "t" >>>t2 = Thing.instance "t" >>> >>>p t1.id >>>p t2.id >>> >>> >>>[rolo] mysterious. it works! but since cache is an instance level variable how is it shared amongst all the class instances? >> >>@cache is an instance variable of the class Object called Thing. It's >>just a regular instance variable, but it happens to be stored in a class >>object instead of in instances of the class. Instances of Thing can't >>access it directly. >> >>[rolo] should it not be @@cache ? > > > No, that's a class variable, which is different from an instance > variable of a Class object. In spite of the shared use of '@', > they're separate and different things. > > [rolo] There are 2 things here. one Thing object and other t1 object. > @cache is a variable that belongs to Thing or t1? Thing is an instance of Class. t1 is an instance of Thing. @cash belongs to Thing and is not visible to t1 (on a side none, @@cash would be visible to all instances of Thing, to t1 in particular). Gennady. > > rolo > > > >