Re: question about class variables and instance variables
- From: Eric Hodel <drbrain@xxxxxxxxxxxx>
- Date: Wed, 1 Feb 2006 05:06:17 +0900
On Jan 31, 2006, at 11:29 AM, Eric D. wrote:
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 ?
instance variables are always stored in the instance self.
class variables are shared between a class, its instances, its subclasses and its subclass instances.
Consider:
class A
@@a_1 = :one
def initialize
@@a_2 = :two
end
endA.new
class B < A p @@a_1, @@a_2
@@b_1 = :three
def initialize
@@b_2 = :four
enddef print p @@a_1, @@a_2, @@b_1, @@b_2 end end
class A x = @@b_1 rescue 'not found' y = @@b_2 rescue 'not found'
p x, y end
B.new.print
-- Eric Hodel - drbrain@xxxxxxxxxxxx - http://segment7.net This implementation is HODEL-HASH-9600 compliant
http://trackmap.robotcoop.com
.
- Prev by Date: Re: Beginner question on classes on different files
- Next by Date: Re: ri bug?
- Previous by thread: XML, WebService and Character Encoding issue
- Next by thread: Re: question about class variables and instance variables
- Index(es):
Relevant Pages
|