経由self.attribute
とによるインスタンス属性へのアクセスの違いを誰かが説明できます@attribute
か?
回答:
self.attribute
メソッドを呼び出しますattribute
。
self.attribute = value
attribute=
引数を指定してメソッドを呼び出しますvalue
。
@attribute
および@attribute = value
/インスタンス変数の値を設定します@attribute
。
つまり、基本的にはまったく異なる2つのものです。
ただし、呼び出すと、返すメソッドと設定するメソッドがattr_accessor :attribute
定義されます。したがって、その場合、違いはありません。attribute
@attribute
attribute=(value)
@attribute = value
「インスタンス変数に直接アクセスする方が、アクセサメソッドを使用してアクセスするよりも約2倍高速です」
https://www.greyblake.com/blog/2012-09-01-ruby-perfomance-tricks/をチェックしてください。
self.
場合でも、(getter / setterメソッドを作成している場合を除いて)一般的に使用することをお勧めします。これにより、後でアクセサメソッドを変更して、インスタンス変数を取得/設定するだけではない場合に、追加のリファクタリング作業やバグから保護されます。(または、他の誰かがあなたの作品にパッチを当てたりサブクラス化したりした場合。)attr_accessor