我不認爲類變量和實例變量之間有明顯的區別。
沒有一個微妙的區別。正如Wayne Conrad在his answer here中所述:
類和它的所有後代之間共享一個類變量(@@)。
類的實例變量(@)不被類的後代共享。
@@:類變量(我會建議使用class instance variable
而不是說class variable
,這將減少混亂,是新手人們普遍做到了。)
class Foo;end
#setting class variable @@var
Foo.class_variable_set(:@@var, "good morning!")
#getting class variable @@var via Foo
Foo.class_variable_get(:@@var) # => "good morning!"
class Bar < Foo ;end
#getting class variable @@var via Bar subclass of Foo
Bar.class_variable_get(:@@var) # => "good morning!"
@:實例可變
class Foo;end
foo = Foo.new
#setting instance variable @var
foo.instance_variable_set(:@var, "good morning!")
#getting instance variable @var via foo object
foo.instance_variable_get(:@var) # => "good morning!"
class Bar < Foo ;end
bar = Bar.new
#getting instance variable @var via bar object,whose class is a subclass of Foo
bar.instance_variable_get(:@var) # => nil
你叫什麼 「類變量」 是不是一類變量。它是一個類對象的實例變量。真實的類變量被預置爲'@@' –
[實例變量,類變量和它們在紅寶石之間的區別]的可能重複(http://stackoverflow.com/questions/7329954/instance-variable-class-variable-and它們之間的差異) – quetzalcoatl
謝謝大家回答我的問題:)類變量可以在子類中看到,而實例變量不能。我認爲這是主要的區別。 (我沒有想到我的問題爭吵......我不知道發生了什麼。但我仍然感謝你的耐心) – ruanhao