Пожалуйста, помогите мне понять переменные экземпляра уровня класса.
@@ — это переменная класса, эквивалентная переменной экземпляра (@) в экземпляре класса.
Но что такое переменная экземпляра (@) при использовании на уровне класса? Если он помещает определение в экземпляр класса, то почему бы не определить его в инициализаторе?
class MyClass
cattr_reader :class_variable
def self.new_instance(cv, cliv, iv)
@@class_variable = cv
@class_level_instance_variable = cliv
self.new(iv)
end
def initialize(iv)
@instance_variable = iv
end
def use
puts "class_var=#{self.class.class_variable.inspect}\ninst_var=#{@instance_variable.inspect}\ncliv=#{@class_level_instance_variable.inspect}"
end
end
c = []
c << MyClass.new_instance(1,2,3)
c[0].use
c << MyClass.new_instance(4,5,6)
c[1].use
c << MyClass.new_instance(7,8,9)
c[2].use
c[0].use
c[1].use
c[2].use