2

重複の可能性:
Rubyで@@ variableはどういう意味ですか?

ダブル'@'でオブジェクトを宣言する場合の違いは何ですか

@@lexicon = Lexicon.new()

そして、Rubyで単一の「@」を使用してオブジェクトを宣言しますか?

@lexicon = Lexicon.new()
4

1 に答える 1

6

違いは、最初の変数がクラス変数で、2番目の変数がインスタンス変数であるということです。

インスタンス変数は、オブジェクトのそのインスタンスでのみ使用できます。すなわち

class Yasin
  def foo=(value)
    @foo = value
  end

  def foo
    @foo
  end
end

yasin = Yasin.new
yasin.foo=1
yasin.foo #=> 1
yasin_2 = Yasin.new
yasin_2.foo #> nil

クラス変数は、クラス変数が定義されたクラス(およびサブクラス、iirc)のすべてのインスタンスで使用できます。

class Yasin
  def foo=(value)
    @@foo = value
  end

  def foo
    @@foo
  end
end

yasin = Yasin.new
yasin.foo=1
yasin.foo #=> 1
yasin_2 = Yasin.new
yasin_2.foo #=> 1
于 2012-11-06T09:54:24.550 に答える