クラス変数とインスタンス変数の間に明確な違いがあるとは思いません。
いいえ、微妙な違いがあります。ウェイン・コンラッドが彼の答えで述べているように:
クラス変数 (@@) は、クラスとそのすべての子孫の間で共有されます。
クラス インスタンス変数 (@) は、クラスの子孫によって共有されません。
@@ : クラス変数 ( を使用することをお勧めします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