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

pis*_*hio 80 ruby accessor instance-variables

谁能解释通过self.attribute和通过访问实例属性之间的区别@attribute

sep*_*p2k 100

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

所以基本上他们是完全不同的两件事.

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

  • 请注意,通常建议使用`self.(除非你正在编写getter/setter方法),即使你_currently_有`attr_accessor`.如果您稍后更改访问器方法而不仅仅是获取/设置实例变量,这可以保护您免受额外的重构工作和错误.(或者,如果其他人对您的工作进行补丁或子类化.) (14认同)
  • Phrogz所讨论的错误之一就是如果你只是调用attribute = _____而不是self.attribute = ______你正在设置局部变量而不是实例变量. (6认同)