web-dev-qa-db-ja.com

インスタンス変数への直接アクセスとアクセサメソッドの使用

self.attributeを介したインスタンス属性へのアクセスと@attributeによるインスタンス属性へのアクセスの違いを誰かが説明できますか?

80
pistacchio

_self.attribute_はメソッドattributeを呼び出します。
_self.attribute = value_は、引数_valueを指定してメソッド_attribute=_を呼び出します。
_@attribute_および_@attribute = value_は、インスタンス変数_@attribute_の値を取得/設定します。

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

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

99
sepp2k

「インスタンス変数に直接アクセスする方が、アクセサーメソッドでインスタンス変数にアクセスするよりも約2倍高速です」

チェックしてください: http://greyblake.com/blog/2012/09/02/Ruby-perfomance-tricks/

3
meso_2600