0
我跑了一個試圖瞭解singleton如何工作的實驗。爲什麼我們在ruby中使用@@作爲類變量的前綴?
我不明白爲什麼我們用@@代替@作爲類變量的前綴?如下所述,如果變量是與類定義內聯創建的,則self被定義爲Test,並且該變量是一個類變量是否正確?然後,我們可以在單例類定義中使用attr_accessor來訪問它。初始化中的@var似乎不同,因爲self在初始化時被設置爲上下文中的t,所以var在該上下文中屬於t?
這是非常混亂,任何幫助將不勝感激。
class Test
@var = 99
attr_accessor :var
def initialize
@var = "Whoop" #if this is commented, pri doesn't print anything.
end
def pri
puts @var
end
class << self
attr_accessor :var
end
end
t = Test.new
puts Test.var # Outputs 99
Test.var = 5
puts Test.var # Outputs 5
puts t.pri # Outputs Whoop
如果它不是一個類變量,我如何能夠訪問Test.var的值?爲什麼在單例中使用attr_accessor允許我改變它?呃,我不明白這一點。 – Senjai
因爲你做了'attr_accessor',它定義了訪問實例變量的實例方法。 'Test'是'Class'類的一個實例。而且由於你創建了一個單例類,'Test'也是單例類的一個實例。 – sawa
OH !,所以@@ var是爲那些繼承自這個類的類共享的嗎? – Senjai