2012-01-11 2 views
3

attr_accessor가 설정된 것으로 가정하고 클래스 내에서 인스턴스 변수에 액세스하는 것이 가장 바람직한 지 궁금합니다.Ruby 인스턴스 변수 액세스

class Test 
    attr_accessor :user 

    def initializer(user) 
    @user = user 
    end 

    def foo 
    @user 
    end 
end 

또는 인스턴스 변수 (@user) 또는 게터 방법 (시험 # 사용자)에 의해 그래서

class Test 
    attr_accessor :user 

    def initializer(user) 
    @user = user 
    end 

    def foo 
    self.user 
    end 
end 

?

답변

6

리터러가 더 쉽기 때문에 게터 방법. 액세스 지점에서 타임 스탬프를 업데이트하려고한다고 가정 해보십시오.

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을 사용하면 private이어야합니다. – Mori

관련 문제