2012-01-11 214 views
3

只要好奇,在假设attr_accessor被设置的情况下,从类内部访问实例变量的最佳做法是什么。Ruby实例变量访问

class Test 
    attr_accessor :user 

    def initializer(user) 
    @user = user 
    end 

    def foo 
    @user 
    end 
end 

class Test 
    attr_accessor :user 

    def initializer(user) 
    @user = user 
    end 

    def foo 
    self.user 
    end 
end 
通过实例变量(@user)或吸气剂的方法(试验#用户)

所以?

回答

6

Getter方法,因为它更容易重构。假设你想在访问点更新时间戳。

class Test 
    def user 
    @user.last_read = Time.now 
    @user 
    end 
end 

并且所有对user的引用都用新逻辑更新。如果您的参考文献是@user,则不那么容易。

+1

这个想法是红宝石不可知的。请参阅http://stackoverflow.com/questions/3069901为什么属性应该优于字段。 – Gishu 2012-01-11 05:14:55

+0

如果仅添加attr_accessor以供内部使用,该怎么办?我不需要这些属性来进行外部访问,所以在那个时候,添加attr_accessor是不必要的,因此在内部使用实例变量来获取/设置更有意义? – user577808 2012-01-11 12:20:24

+1

@ user577808在类中应用相同的原则,但上下文越小,重要性越低,因为重构更容易。但是,最好公开一个类的最小接口,所以在这种情况下,如果使用get/set,它应该是私有的。 – Mori 2012-01-11 14:25:31