2011-01-09 9 views

答えて

97

self.attributeは、attributeというメソッドを呼び出します。
self.attribute = valueは、valueという引数を使用してattribute=というメソッドを呼び出します。
@attributeおよび@attribute = valueインスタンス変数@attributeの値を取得または設定します。

基本的に2つの全く異なるものです。

は、しかし、あなたがattr_accessor :attributeを呼び出す場合には、@attribute@attribute = valueを設定する方法attribute=(value)を返すようにする方法attributeを定義します。その場合、違いはありません。

+14

注それは、一般的にあなたがない限り( 'self.'を使用することが推奨されていることgetter/setterメソッドを記述しています)。現在、あなたは 'attr_accessor'を持っています。これは後でインスタンス変数を取得/設定するだけではなく、アクセサメソッドを変更してリファクタリングやバグを防ぐためです。 (あるいは他の人があなたの仕事にパッチやサブクラスをつけている場合) – Phrogz

+6

Phrogzが話しているバグの1つは、単にself.attribute = _____の代わりにattribute = _____を呼んでインスタンス変数の代わりにローカル変数を設定している場合です。 –

関連する問題