インスタンス変数に直接アクセスする場合とアクセサメソッドを使用する場合


回答:


100

self.attributeメソッドを呼び出しますattribute
self.attribute = valueattribute=引数を指定してメソッドを呼び出しますvalue
@attributeおよび@attribute = value/インスタンス変数の値を設定します@attribute

つまり、基本的にはまったく異なる2つのものです。

ただし、呼び出すと、返すメソッドと設定するメソッドがattr_accessor :attribute定義されます。したがって、その場合、違いはありません。attribute@attributeattribute=(value)@attribute = value


14
現在持っているself.場合でも、(getter / setterメソッドを作成している場合を除いて)一般的に使用することをお勧めします。これにより、後でアクセサメソッドを変更して、インスタンス変数を取得/設定するだけではない場合に、追加のリファクタリング作業やバグから保護されます。(または、他の誰かがあなたの作品にパッチを当てたりサブクラス化したりした場合。)attr_accessor
Phrogz 2011年

6
Phrogzが話しているバグの1つは、self.attribute = ______の代わりにattribute = _____を呼び出すだけで、インスタンス変数の代わりにローカル変数を設定していることです。
ジェイソンノーブル

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.