On 8/2/05, francisrammeloo / hotmail.com <francisrammeloo / hotmail.com> wrote:
> I need some of my classes to keep track of their number of
> instances. To avoid duplication I thought it was a good idea to
> put this functionality in a separate module:

> module InstanceCounter
>   def initialize(*args)
>     super
>     @count = 0
>   end
> 
>   def increase_count()
>     @count += 1
>     return @count - 1
>   end
> end

I think you want, instead:

  module InstanceCounter
    def increase_count
      @@count ||= 0
      @@count += 1
      (@@count - 1)
    end
  end

Note that this isn't thread-safe. It also won't help in cases where
you subclass your class that includes InstanceCounter. What you'd
probably want is something that deals with a class-instance variable
rather than a class variable, and that would be able to be dealt
with using #append_features (I think). Additionally, under the
current scheme, #increase_count is a public method that anyone can
call on an instance.

There are examples of how to get create this count safely somewhere,
I just can't recall where offhand. ;)

The main trick you're after, though, is @@count ||= 0.

-austin
-- 
Austin Ziegler * halostatue / gmail.com
               * Alternate: austin / halostatue.ca