2011-01-09 92 views

回答

97

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

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

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

+14

需要注意的是,通常建议使用`self.`(除非你编写getter/setter方法),即使你现在拥有`attr_accessor`。这可以保护您免受额外的重构工作和错误的影响,如果您稍后将访问方法更改为不仅仅是获取/设置实例变量。 (或者如果其他人为你的工作提供补丁或子类) – Phrogz 2011-01-09 15:03:30