2

ruby は を使ってどのようにvarzメソッドを呼び出すのvarz[:foo]ですか?

class Component
  class << self
    def varz
      @varz ||= Hash.new
    end
  end
end

Component.varz[:foo] = 'bar'
puts Component.varz # {:foo=>"bar"}
4

2 に答える 2

3

class << self は、クラスで呼び出されるクラス メソッドを定義するために使用されます。

@varz はインスタンス変数を表します。では、なぜこのインスタンス オブジェクトがクラス メソッドで実行されているのか疑問に思うかもしれません。これは、クラス自体がClassのインスタンスであるためです。

もう1つ注意すべき点は、Rubyメソッドでは最後のステートメントを返すことです。したがって、あなたの場合、Component.varzはハッシュ型のインスタンス変数 @varz を返します。

Component.varz[:foo] = 'bar'

これにより、キーと値のペア foo と 'bar' がハッシュに追加されます。

そして最後に、

p Component.varz 

varz メソッドによって返された値を出力しています。

于 2012-12-13T10:14:56.353 に答える
1

あなたはそれを間違った方法で切りました。Component.varzメソッド呼び出しです。その結果 (ハッシュ) に[:foo] =適用されます。[]and[]=メソッドは、レシーバーとメソッドの間にピリオドを入れないという点で特別です。

于 2012-12-13T10:07:03.433 に答える