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"}
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"}
class << self は、クラスで呼び出されるクラス メソッドを定義するために使用されます。
@varz はインスタンス変数を表します。では、なぜこのインスタンス オブジェクトがクラス メソッドで実行されているのか疑問に思うかもしれません。これは、クラス自体がClassのインスタンスであるためです。
もう1つ注意すべき点は、Rubyメソッドでは最後のステートメントを返すことです。したがって、あなたの場合、Component.varzはハッシュ型のインスタンス変数 @varz を返します。
Component.varz[:foo] = 'bar'
これにより、キーと値のペア foo と 'bar' がハッシュに追加されます。
そして最後に、
p Component.varz
varz メソッドによって返された値を出力しています。
あなたはそれを間違った方法で切りました。Component.varz
メソッド呼び出しです。その結果 (ハッシュ) に[:foo] =
適用されます。[]
and[]=
メソッドは、レシーバーとメソッドの間にピリオドを入れないという点で特別です。