Re: question about class variables and instance variables
- From: Logan Capaldo <logancapaldo@xxxxxxxxx>
- Date: Wed, 1 Feb 2006 05:12:52 +0900
On Jan 31, 2006, at 2:29 PM, Eric D. wrote:
Hello,
I've some difficolties with instance variables and classe variables
With :
class A def foo @foo end def bar @@bar end end
a = A.new
--------- ------------ ------------ | | | | | | | a |--(instance_of)->-| A |--(instance_of)->-| Class | | | | | | | --------- ------------ ------------
a is an instance of A which itself is an instance of Class @foo is an instance variable, so it is stored in box "a" @@bar is a class variable, so it is stored in box "A"
if I do something like the following :
class A def A.strange @strange end end
Where is stored my @strange ? I had the hypothesis that @strange in the
"A" context was equivalent to @@strange in the "a" context but the
following code prove me to be wrong :
class A def A.strange @strange end def strange=( val ) @@strange = val end end
a = A.new a.strange= 2 p A.strange # output is nil, not 2
Could someone explain me where to place this @strange ? in which box could I store it ?
Thanks in advance -- Eric D.
-- Posted via http://www.ruby-forum.com/.
Classes are objects too. @strange is an instance variable of the object A (which has class, Class). @@strange is a class variable of the class A. The difference is that instances of A can peek at the class vars. They can't peek at A's instance vars. They are in two separate namespaces. The other difference is that class variables aren't so much class variables as they are class hiearchy vars. EG:
class A @@strange = 1 end
class B < A puts @@strange end
#prints 1
class C @strange = 1 end
class D < C puts @strange end
# prints nil
.
- Prev by Date: Re: ri bug?
- Next by Date: Re: Beginner question on classes on different files
- Previous by thread: Re: question about class variables and instance variables
- Next by thread: memoize
- Index(es):
Relevant Pages
|