From: rolo Date: 2004-04-10T05:13:17+09:00 Subject: Re: Cache of objects > > 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? rolo