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

+0

Что делать, если attr_accessor добавляется только для внутреннего использования? Мне не нужны эти атрибуты для внешнего доступа, поэтому в этот момент нет необходимости добавлять attr_accessor, и поэтому имеет смысл просто использовать переменную экземпляра внутри, чтобы получить/установить? – user577808

+1

@ user577808 тот же принцип применяется в классе, но чем меньше контекст, тем менее важно, потому что рефакторинг проще. Тем не менее, рекомендуется показать минимальный интерфейс класса, поэтому в этом случае, если вы используете get/set, он должен быть закрытым. – Mori

Смежные вопросы