2012-01-11 155 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