任何人都可以解释通过self.attribute
和@attribute
访问实例属性之间的区别吗?直接访问实例变量与使用访问器方法
77
A
回答
97
self.attribute
调用方法attribute
。
self.attribute = value
使用参数value
调用方法attribute=
。
@attribute
和@attribute = value
获取/设置实例变量的值@attribute
。
所以基本上他们是两个完全不同的东西。
但是如果你调用attr_accessor :attribute
它定义的方法attribute
返回@attribute
和方法attribute=(value)
设置@attribute = value
。所以在这种情况下,没有区别。
1
“访问实例变量是直接用比存取方法访问它们快约两倍”
时退房:http://greyblake.com/blog/2012/09/02/ruby-perfomance-tricks/
相关问题
- 1. 直接访问实例变量
- 2. 将实例变量传递给实例方法与直接访问它们?
- 3. 变量有权访问实例方法
- 4. 从方法实例访问此变量
- 5. 从方法访问实例变量
- 6. 访问实例变量
- 7. Ruby实例变量访问
- 8. 访问实例变量
- 9. 访问实例变量
- 10. coffeescript访问实例变量
- 11. Python - 实例变量访问
- 12. Java访问实例变量
- 13. 访问类实例变量
- 14. 无法与扩展方法来访问实例变量和λ
- 15. 访问实例变量,而不是实例方法在Python
- 16. 无法访问实例变量
- 17. 无法访问实例变量
- 18. 如何直接访问ivars与使用访问器不同?
- 19. 实例变量“变量”类方法错误访问
- 20. Objective-C实例变量访问器方法
- 21. Python类,实例变量和访问器方法
- 22. 从单例方法访问实例变量
- 23. 实例化后可用的方法访问Javascript本地变量?
- 24. 方法链接和访问变量
- 25. 访问方法和变量
- 26. 回调方法无法访问成员变量或实例
- 27. 动态添加实例方法无法访问类变量
- 28. Rspec私有方法无法访问类实例变量?
- 29. ActiveModel :: Serializer实例变量在方法中无法访问
- 30. Tk DSL无法访问实例方法和变量?
需要注意的是,通常建议使用`self.`(除非你编写getter/setter方法),即使你现在拥有`attr_accessor`。这可以保护您免受额外的重构工作和错误的影响,如果您稍后将访问方法更改为不仅仅是获取/设置实例变量。 (或者如果其他人为你的工作提供补丁或子类) – Phrogz 2011-01-09 15:03:30