D
David A. Black
Hi --
I figure that I owe the world at least a shot at clearing the cobwebs
(of my own creation, that is on this instance variable thing.
So... for those still reading... here's what I *really* think is being
proposed:
class A
def m
@var = "hi" # regular instance variable
@_var = "hello" # class-local instance variable
end
end
class B < A
def n
puts @var # same as @var, above
puts @_var # not same as @_var above
end
end
o = B.new
o.m
o.n
=> Output:
hi # the @var that was set in A#m is used here
nil # the @_var that was in A#m is *not* used here
# (because we're now in a method defined in B,
# a subclass of A, and class local instance
# variables are not shared by subclasses)
In other words:
* Regular instance variables live per-name per-object
(o has exactly one @var).
* Class-local instance variables live per-name per-object per-class
(o's methods defined in A have a @_var, and o's methods defined in
B have a different @_var).
David
I figure that I owe the world at least a shot at clearing the cobwebs
(of my own creation, that is on this instance variable thing.
So... for those still reading... here's what I *really* think is being
proposed:
class A
def m
@var = "hi" # regular instance variable
@_var = "hello" # class-local instance variable
end
end
class B < A
def n
puts @var # same as @var, above
puts @_var # not same as @_var above
end
end
o = B.new
o.m
o.n
=> Output:
hi # the @var that was set in A#m is used here
nil # the @_var that was in A#m is *not* used here
# (because we're now in a method defined in B,
# a subclass of A, and class local instance
# variables are not shared by subclasses)
In other words:
* Regular instance variables live per-name per-object
(o has exactly one @var).
* Class-local instance variables live per-name per-object per-class
(o's methods defined in A have a @_var, and o's methods defined in
B have a different @_var).
David