0

以下のスニペットでは、

class MyClass
  class << self    
    @@variable1 = 'foo'

    def my_method
      @variable2 = 'bar'
    end
  end
end

とクラス変数@@variable1は? @variable2別の言い方をすれば、上記のスニペットは次のスニペットと同等です。

 class MyClass
    @@variable1 = 'foo'

    def self.my_method
      @@variable2 = 'bar'
    end
 end

編集済み

@suvankar、答えてくれてありがとう。2 番目のスニペットはタイプミスだったので、'self' を含めるように編集しました。実際、最初のスニペットで variable2 がクラス変数であるかどうかは完全にはわかりません。たとえば、最初のスニペットを irb にロードして、次のように入力するとします。

  >> MyClass.class_variables
  => [@@variable1]

  >> MyClass.instance_variables
  => [@variable2]

そのため、variable1 はクラス変数のようです (驚くことではありません)。ただし、variable2 はクラス MyClass のインスタンス変数です。

4

2 に答える 2

1

@@variable1クラス変数であり@variable2、クラスのインスタンス変数であることは正しいです。@@variable2(スニペット 2 でのみ定義されている) もクラス変数であるため、2 つのスニペットは同等ではありません。

(注: irb の出力にタイプミスがあり、 を@variable2呼び出した後にのみ含まれているはずだと思いますMyClass.my_method。)

于 2013-08-04T21:45:20.653 に答える