From: Gabriel Dragffy Date: 2007-10-07T22:04:30+09:00 Subject: Re: Is using attr_accessor for class variables possible? 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