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?
Many thanks
Gabriel
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?
Many thanks
Gabriel
Hi –
On Sun, 7 Oct 2007, Gabriel D. 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
If you want to wrap them in methods:
class C
def C.var
@@var
end
def C.var=(x)
@@var = x
end
end
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
David
On 7 Oct 2007, at 13:39, David A. Black wrote:
Good point, I mean access the class variable from outside the class
(above the class).
@@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.
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
Hi,
Am Sonntag, 07. Okt 2007, 21:39:24 +0900 schrieb David A. Black:
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 do this all the time. But:
class D < C ; end
Always keep in mind that D.var' will be something different than
C.var’.
Bertram
Hi,
Am Sonntag, 07. Okt 2007, 22:56:54 +0900 schrieb David A. Black:
I do this all the time. But:
class D < C ; end
Always keep in mind that
D.var' will be something different than
C.var’.That’s the point of attr_accessor: to give easy access to per-object
state.
About a month ago I found myself doing even this:
class C
@x = “x-default”
class <<self
def x ; @x or superclass.x ; end
end
end
class D < C ; end
class E < D ; @x = “x-special” ; end
puts C.x
puts D.x
puts E.x
I still don’t know what is better: using stable instance
methods (same value on every call) or doing it this way.
Bertram
Hi –
On Sun, 7 Oct 2007, Bertram S. wrote:
end
I do this all the time. But:
class D < C ; end
Always keep in mind that
D.var' will be something different than
C.var’.
That’s the point of attr_accessor: to give easy access to per-object
state.
David
This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.
Sponsor our Newsletter | Privacy Policy | Terms of Service | Remote Ruby Jobs