我今天在一些代碼中看到了這個。@自我方法裏面用到的是做什麼的?
class Foo
def self.bar
@myvar = 'x'
end
end
究竟是什麼訪問?據我所知,這是不可訪問的表單實例方法。這是什麼叫(谷歌能夠),因爲我似乎無法找到其他任何地方的例子。
我今天在一些代碼中看到了這個。@自我方法裏面用到的是做什麼的?
class Foo
def self.bar
@myvar = 'x'
end
end
究竟是什麼訪問?據我所知,這是不可訪問的表單實例方法。這是什麼叫(谷歌能夠),因爲我似乎無法找到其他任何地方的例子。
的@myvar
語法識別myvar
作爲一個實例變量,因此真正的問題是這樣的:
什麼是
self
一個類的方法裏面?
而答案是「self
是類對象」。所以,@myvar
是Foo
類對象的實例變量。如果添加另一個類方法:
class Foo
def self.pancakes_house
@myvar
end
end
然後做到這一點:
Foo.bar
puts Foo.pancakes_house
你會看到x
在標準輸出。
一個類也是一個對象,所以你在Foo類中設置了一個實例變量。現在
>> Foo.bar
>> Foo.instance_variable_get("@myvar")
=> 'x'
,對於一個典型的使用,添加class << self; attr_accessor :myvar; end
到類,你可以寫:
>> Foo.bar
>> Foo.myvar
=> 'x'
對於谷歌搜索,這有時被稱爲「類實例變量」。也就是說,恰好是一個類的對象的實例變量。
後續問題:在Ruby社區中是否有一種'信仰',關於使用它們是否是好的做法? (它馬上跳出來,因爲我不是線程安全的。) – 2011-06-16 03:33:56
@John:我不知道是否有普遍的共識,我從來不需要這樣的事情。也許如果出於某種原因,你需要一個隱藏在實例中的類變量,你會做這種事情。 – 2011-06-16 03:42:48