2016-07-08 14 views
0

Ich glaube, ich bin für den Unterschied zwischen @store und @@store in der folgenden fragen:Statische Variablen versus Eigenklassenklassenvariablen, was ist der Unterschied in 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 

Wo sind statische Variablen an, wenn nicht die Eigenklasse? Sind die beiden in Bezug auf die Interaktion effektiv gleich?

+0

@@ Variablen innerhalb der Klassenhierarchie gemeinsam benutzt werden (und Klasseninstanzen), Klasse-Ebene @variables nicht. –

Antwort

0

Sie sind beide Klassenvariablen, aber in einer Instanz können Sie nur auf die Variable @@ store zugreifen.

Beachten Sie, dass Klassenvariablen in Ruby nicht Thread-sicher sind. Verwenden Sie daher Mutex, wenn Sie Varaible als Hash verwenden möchten.

Using class instance variable for mutex in Ruby

Verwandte Themen