説明してください、理解できません。
class Foo
@a = 123
@@b = 123
end
変数オブジェクトクラスとクラス変数の利点は何ですか? いつ最初に使用する必要があり、どの場合に 2 番目を使用する必要がありますか?
説明してください、理解できません。
class Foo
@a = 123
@@b = 123
end
変数オブジェクトクラスとクラス変数の利点は何ですか? いつ最初に使用する必要があり、どの場合に 2 番目を使用する必要がありますか?
クラスのインスタンスごとに新たに作成されるインスタンス レベル変数領域。たとえば、変数@id
は のインスタンスごとに一意である必要がありますFoo
。ただし、型のすべてのインスタンスで同じにする必要がある値がいくつかある場合があります。その場合、クラス変数の方が適切です。
クラス レベル変数の重要な副作用の 1 つは、それらが派生クラス間でも共有されることです。これは、'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
クラスのすべてのインスタンスでその変数を共有する場合はクラス変数を使用し、各インスタンスに独自の非共有変数を持たせる場合はインスタンス変数を使用します。