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


Answers:


100

self.attribute调用方法attribute。以参数
self.attribute = value调用方法。并获取/设置实例变量的值。attribute=value
@attribute@attribute = value@attribute

因此,基本上,它们是完全不同的两件事。

但是,如果调用attr_accessor :attribute它,则定义attribute要返回@attribute的方法和attribute=(value)要设置的方法@attribute = value。因此,在那种情况下,没有区别。


14
请注意,self.即使您当前拥有,通常也建议使用(除非您正在编写getter / setter方法)attr_accessor。如果您以后将访问器方法更改为不仅仅是获取/设置实例变量,还可以保护您免受其他重构工作和错误的侵害。(或者其他人对您的工作进行修补或子类化。)
Phrogz,2011年

6
Phrogz讨论的错误之一是,如果仅调用attribute = _____而不是self.attribute = ______,则您正在设置局部变量而不是实例变量。
杰森·诺布尔

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.