0
Q
類別變量
A
回答
4
實例級別變量區域爲類的每個實例重新創建。例如,對於Foo
的每個實例,變量@id
應該是唯一的。但是,對於每個類型的實例,可能有一些值應該是相同的。在這種情況下,類變量會更合適。
類別級變量的一個重要副作用是它們在派生類中共享以及。這意味着改變'Foo'子類的值也會改變'Foo'對象的值。這可能是你想要的,但找出困難的方式可能有點令人驚訝。
例如:
class Foo
@@some_var = 1
def bar
puts(@@some_var)
end
end
class Baz < Foo
def perhaps_unexpected
@@some_var = 10
Foo.new.bar #prints '10'
end
end
1
當你想在類的所有實例共享變量使用類變量,當你想用一個實例變量,每個實例有它自己的非共享變量。
此代碼打印3和零。爲什麼? 'code'class MyClass的 \t @@全球= 3 \t @local = 7 \t \t DEF my_print \t \t放@@全球 \t \t提出@local \t端 端 OBJ = MyClass.new obj.my_print'code' – user413881 2011-06-06 19:57:53
因爲你不能在類作用域中初始化成員變量,所以你需要在一個方法內部(通常是構造函數'initialize')完成它。從文檔中:'一個實例變量的名字以@開始,其範圍限制在self指向的任何對象上.'在你的代碼中'self'不引用該類作用域,所以該變量未初始化。 – 2011-06-06 20:05:18
謝謝你的解釋 – user413881 2011-06-06 20:13:55