On 7 Oct 2007, at 13:39, David A. Black wrote:

> Hi --
>
> On Sun, 7 Oct 2007, Gabriel Dragffy wrote:
>
>> I know that attr_accessor works for accessing instance variables,  
>> but it doesn't seem to work for class ones. What is the best way  
>> to set/retrieve the value of a class variable?
>
> @@var = 1
> @@var
>

Good point, I mean access the class variable from outside the class  
(above the class).

> :-)
>
> If you want to wrap them in methods:
>
>   class C
>     def C.var
>       @@var
>     end
>
>     def C.var=(x)
>       @@var = x
>     end
>   end
>

I was wondering if I should do this. I just remember attr_accessor  
was a short cut for this, but only for instance variables.

> In Rails, there's a thing called "cattr" that does this automatically:
>
>   class C
>     cattr_acccessor :var
>   end
>
> It's a little misleading, though. The term "attribute" (or attr)
> refers to an attribute or property of an object. Class variables are
> very promiscuous: they're shared among many objects (a class, its
> descendants, all instances of all of those classes), so a class
> variable is not really the right choice for an "attribute", and "attr"
> is not the best name for wrappers around class variables.
>
> If you want to represent state per class, the best way is to give your
> class an instance variable or accessor:
>
>   class C
>     class << self    # C's singleton class
>       attr_accessor :var
>     end
>   end

I read about singletons in Pragmatic Programming, not entirely sure  
how to make use of it though

Thank you very much for your advice.

Regards

Gabe