From: "Mauricio Fernández" Date: 2003-06-19T15:20:34+09:00 Subject: Re: Class variables in parent and child classes with the same name On Thu, Jun 19, 2003 at 09:17:48AM +0900, Zellyn Hunter wrote: > Am I misunderstanding something, or can you not give a child class a class > variable with the same name as a parent class? Just curious. Right, class variables are "tree scoped", meaning that they're accessible downwards from the point in the class hierarchy they were first assigned: batsman@tux-chan:/tmp$ expand -t2 /tmp/ax.rb class A def foo= o @@foo = o end def foo @@foo end end class B < A def bar= o @@foo = o end def bar @@foo end end a = B.new a.bar = 'bar' puts a.bar a.foo = 'foo' puts a.foo puts a.bar a.bar = 'bar' puts a.foo batsman@tux-chan:/tmp$ ruby /tmp/ax.rb bar foo /tmp/ax.rb:16: warning: class variable @@foo of A is overridden by B bar /tmp/ax.rb:13: warning: class variable @@foo of A is overridden by B foo > It seems to work as one would expect for constants, but obviously one couldn't > use a constant to keep track of information. You can get the desired behavior with class instance variables: batsman@tux-chan:/tmp$ expand -t2 /tmp/aw.rb class Parent @count = 1 class << self; attr_reader :count end def parentCount Parent.count end end class Child < Parent @count = 2 def childCount Child.count end end p = Parent.new c = Child.new puts p.parentCount puts c.childCount puts c.parentCount batsman@tux-chan:/tmp$ ruby /tmp/aw.rb 1 2 1 -- _ _ | |__ __ _| |_ ___ _ __ ___ __ _ _ __ | '_ \ / _` | __/ __| '_ ` _ \ / _` | '_ \ | |_) | (_| | |_\__ \ | | | | | (_| | | | | |_.__/ \__,_|\__|___/_| |_| |_|\__,_|_| |_| Running Debian GNU/Linux Sid (unstable) batsman dot geo at yahoo dot com MSDOS didn't get as bad as it is overnight -- it took over ten years of careful development. -- dmeggins@aix1.uottawa.ca