0

説明してください、理解できません。

class Foo
  @a = 123
  @@b = 123
end

変数オブジェクトクラスとクラス変数の利点は何ですか? いつ最初に使用する必要があり、どの場合に 2 番目を使用する必要がありますか?

4

2 に答える 2

4

クラスのインスタンスごとに新たに作成されるインスタンス レベル変数領域。たとえば、変数@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
于 2011-06-06T19:45:57.900 に答える
1

クラスのすべてのインスタンスでその変数を共有する場合はクラス変数を使用し、各インスタンスに独自の非共有変数を持たせる場合はインスタンス変数を使用します。

于 2011-06-06T19:48:31.163 に答える