Gabriel Dragffy
10/7/2007 1:05:00 PM
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