直接访问实例变量与使用访问器方法
Posted
技术标签:
【中文标题】直接访问实例变量与使用访问器方法【英文标题】:Directly accessing an instance variable vs. Using an accessor method 【发布时间】:2011-06-06 01:44:50 【问题描述】:谁能解释通过self.attribute
和@attribute
访问实例属性的区别?
【问题讨论】:
【参考方案1】:self.attribute
调用方法attribute
。self.attribute = value
使用参数value
调用方法attribute=
。@attribute
和@attribute = value
获取/设置实例的值变量@attribute
。
所以基本上它们是两个完全不同的东西。
但是,如果您调用 attr_accessor :attribute
,它会定义方法 attribute
以返回 @attribute
,并定义方法 attribute=(value)
以设置 @attribute = value
。所以在那种情况下,没有区别。
【讨论】:
请注意,即使您当前拥有attr_accessor
,通常也建议使用self.
(除非您正在编写getter/setter方法)。如果您稍后更改访问器方法以执行更多操作而不仅仅是获取/设置实例变量,这可以保护您免受额外的重构工作和错误。 (或者如果其他人对您的工作进行了修补或子类化。)
Phrogz 谈到的错误之一是,如果您只是调用 attribute = _____ 而不是 self.attribute = ______ 您设置的是局部变量而不是实例变量。【参考方案2】:
“直接访问实例变量比使用访问器方法访问它们快两倍”
查看:https://www.greyblake.com/blog/2012-09-01-ruby-perfomance-tricks/
【讨论】:
链接已损坏。这个有效:greyblake.com/blog/2012-09-01-ruby-perfomance-tricks以上是关于直接访问实例变量与使用访问器方法的主要内容,如果未能解决你的问题,请参考以下文章