2010-08-06 2 views
2

Ruby 클래스를 작성 중이며 == 메서드를 재정의하고 싶습니다. 다음과 같이 말하고 싶습니다.private 필드를 공개하지 않아도 equals 메서드를 만들 수 있습니다.

시간과 주파수를 모두 공개하지 않으면 어떻게해야합니까?

FOLLOW UP : 자손 인스턴스 변수에 액세스 할 수 있기 때문에

class ReminderTimingInfo 

    def initialize(times, frequencies) 
    @date_times, @frequencies = times, frequencies 
    end 

    ... 

    def ==(other) 
    @date_times == other.times and @frequencies == other.frequencies 
    end 

    protected 

    attr_reader :date_times, :frequencies 
end 
+1

getters의 요점이 아닌가요? – NullUserException

+0

귀하의 의견을 upvote 의미하지 않았다, hehe. 나는 getters가 어떤 희생을 치르더라도 피할 수있는 것이라고 말하고 싶다. 어떤 형태의 보호 된 접근이나 어떤 것이 있다면 그것은 좋을 것입니다 ... 아마도 어쩌면 거기에 있습니다. –

+1

개체 상태는 가능한 한 비공개이어야합니다. 클래스 사용자가 객체에 명령을 내릴 필요가없는 것은 사용자에게 보이지 않아야합니다. –

답변

4

당신이 보호에 시간과 주파수 접근을 설정하는 경우, 그들은, 확인을해야하는 클래스와 자손 (의 인스턴스에서만 액세스 할 수 있습니다 어쨌든 그것을 정확하게 다루는 방법을 알아야합니다).

class ReminderTimingInfo 

    # … 

protected 
    attr_reader :times, :frequencies 

end 
+0

감사합니다. 나는 약간 다른 것을 구현하기로 결정했다 ... 위 참조 : –

+0

네 말이 맞아. 그것은 똑같지 만, 특히 많은 속성 (중복이 적음)이있는 경우 더 멋지게 보입니다. – Zargony

2

당신은

def ==(other) 
    @date_times == other.instance_eval{@date_times} and @frequencies == other.instance_eval{@frequencies} 
    end 

을 할 수 어쨌든 나는이 점을 놓치고 있다고 의심!