【问题标题】:Directly accessing an instance variable vs. Using an accessor method直接访问实例变量与使用访问器方法
【发布时间】:2011-06-06 01:44:50
【问题描述】:

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

【问题讨论】:

    标签: ruby instance-variables accessor


    【解决方案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/

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多