2016-07-08 2 views
0

Я предполагаю, что я прошу разницу между @store и @@store в следующем:Статические переменные против переменных класса eigenclass, какова разница в Ruby?

class Test 
    @@store = 9 
    class << self 
    def set_store(v) 
     @store = v 
    end 
    def store 
     @store 
    end 
    def sstore 
     @@store 
    end 
    end 
end 

Test.set_store 8 
p Test.store # 8 
p Test.sstore # 9 

a = Test.new 

p a.class.store # 8 
p a.class.sstore # 9 

Где статические переменные привязаны к, если не в eigenclass? Являются ли эти два фактически одинаковыми с точки зрения взаимодействия?

+0

@@ переменные являются общими в пределах иерархии классов (и экземпляров классов), @variables класса уровня не является. –

ответ

0

Они являются переменными класса, но в экземпляре вы можете получить доступ только к переменной @@.

Помните, что переменные класса не являются потокобезопасными в Ruby, поэтому используйте Mutex, если вы планируете использовать varaible как Hash.

Using class instance variable for mutex in Ruby

Смежные вопросы