なぜ、 '属性='内部の初期化にselfという接頭辞が必要なのか分かりません。initialize()ルビの明示的な内部が必要な理由
'名前' 方法は
attributes = attrs
に変更self.attributes = attrs
場合{=> "誰か" "名前"}方法
class A
attr_accessor :attributes
def initialize attrs ={}
self.attributes = attrs
end
def name
puts attributes
end
end
a = {"name" => "someone"}
b = A.new a
b.name
出力を '属性' と呼ぶために接頭辞自己を持っている必要はありません。出力がゼロになる
これはすべて、あなたの 'initialize'メソッドの本体でRubyが' attributes = 'とどのように見えるかによって異なります。それをメソッド呼び出しに強制する 'self'なしでは、それはしばしば変数の代入として解釈されます。 – tadman
「しばしば」ではありません。 *常に* 'foo = bar'は常に' foo'というローカル変数に代入します。実際には、それはRubyがローカル変数参照とメソッド呼び出しを区別する方法です。 'foo'は代入' foo = bar'が以前に解析された場合にのみローカル変数参照です。 –