Class variables vs Class instance variables in Ruby
Ruby posted over 4 years ago by christian
Class variables (available to whole inheritance tree) and class instance variables (private to the class) in Ruby can be confusing:
1 class Foo 2 @@cls_var = 'foo' 3 @cls_instvar = 'foo' 4 5 def test 6 p "instance:" 7 p " class variable: #{@@cls_var}" 8 p " class instance variable: #{@cls_instvar}" 9 end 10 11 def self.test 12 p "class:" 13 p " class variable: #{@@cls_var}" 14 p " class instance variable: #{@cls_instvar}" 15 end 16 end 17 18 class Bar < Foo 19 @@cls_var = 'bar' 20 @cls_instvar = 'bar' 21 end 22 23 f = Foo.new 24 p "------------" 25 p "Foo" 26 p "------------" 27 f.test 28 p "~~~~~~~~~~~~" 29 Foo.test 30 31 p "------------" 32 p "Bar" 33 p "------------" 34 b = Bar.new 35 b.test 36 p "~~~~~~~~~~~~" 37 Bar.test
Output is:
1 ------------ 2 Foo 3 ------------ 4 instance: 5 class variable: bar 6 class instance variable: 7 ~~~~~~~~~~~~ 8 class: 9 class variable: bar 10 class instance variable: foo 11 ------------ 12 Bar 13 ------------ 14 instance: 15 class variable: bar 16 class instance variable: 17 ~~~~~~~~~~~~ 18 class: 19 class variable: bar 20 class instance variable: bar
