Ruby 直接访问实例变量与使用访问器方法

Ruby 直接访问实例变量与使用访问器方法,ruby,instance-variables,accessor,Ruby,Instance Variables,Accessor,有人能解释一下通过self.attribute和通过@attribute访问实例属性的区别吗?self.attribute调用方法属性 self.attribute=value调用带有参数value的方法attribute= @attribute和@attribute=value获取/设置实例变量@attribute的值 所以基本上他们是两个完全不同的东西 但是,如果调用attr\u accessor:attribute,它将定义返回@attribute的方法attribute=(value)来

有人能解释一下通过
self.attribute
和通过
@attribute
访问实例属性的区别吗?

self.attribute
调用方法
属性
self.attribute=value
调用带有参数
value
的方法
attribute=

@attribute
@attribute=value
获取/设置实例变量
@attribute
的值

所以基本上他们是两个完全不同的东西

但是,如果调用
attr\u accessor:attribute
,它将定义返回
@attribute
的方法
attribute=(value)
来设置
@attribute=value
。因此,在这种情况下,没有区别。

“直接访问实例变量的速度大约是使用访问器方法访问它们的速度的两倍。”


查看:

注意,通常建议使用
self.
(除非您正在编写getter/setter方法),即使您当前有
attr\u访问器
。如果您以后更改访问器方法,使其不只是获取/设置实例变量,这将保护您免受其他重构工作和bug的影响。(或者如果其他人对您的工作进行了修补或子类化。)Phrogz所说的一个bug是,如果您只调用attribute=\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。这一个有效: