From: stern@... (Alan Stern) Date: 2002-02-11T02:29:00+09:00 Subject: Class variable madness Can someone tell me what's going on here? Or has this already been fixed? a.rb(main):001:0> RUBY_VERSION "1.6.5" a.rb(main):002:0> RUBY_PLATFORM "i586-linux" a.rb(main):003:0> RUBY_RELEASE_DATE "2001-09-19" a.rb(main):004:0> a.rb(main):005:0* class A a.rb(main):006:1> # @@v = 0 a.rb(main):007:1* def A.set(x) a.rb(main):008:2> @@v = x a.rb(main):009:2> end a.rb(main):010:1> def A.get a.rb(main):011:2> @@v a.rb(main):012:2> end a.rb(main):013:1> def set(x) a.rb(main):014:2> @@v = x a.rb(main):015:2> end a.rb(main):016:1> def get a.rb(main):017:2> @@v a.rb(main):018:2> end a.rb(main):019:1> end nil a.rb(main):020:0> a.rb(main):021:0* class B < A a.rb(main):022:1> @@v = 0 a.rb(main):023:1> end 0 a.rb(main):024:0> a.rb(main):025:0* a = A.new # a.rb(main):026:0> b = B.new # a.rb(main):027:0> a.rb(main):028:0* A.set(3) NameError: uninitialized class variable @@v in A from a.rb:8:in `set' from a.rb:28 # Why didn't that work? a.rb(main):029:0> A.get NameError: uninitialized class variable @@v in A from a.rb:11:in `get' from a.rb:29 a.rb(main):030:0> B.get 0 a.rb(main):031:0> b.get NameError: uninitialized class variable @@v in A from a.rb:17:in `get' from a.rb:31 # How come b.get and B.get are trying to access # different class variables? a.rb(main):032:0> a.rb(main):033:0* a.set(5) 5 a.rb(main):034:0> A.set(5) 5 # Why did this work now when it didn't work before? a.rb(main):035:0> A.get 5 a.rb(main):036:0> B.get 0 a.rb(main):037:0> b.get 5