2012-12-05 3 views
4

나는 Pragmatic Programmers 'Programming Ruby'서적을 통해 일해 왔으며 인스턴스 변수에 직접 할당하는 것이 아니라 클래스 내에서 setter 메소드를 호출 할 수 있는지 궁금해하고있었습니다.Ruby - 객체 내에서 setter 호출하기

class BookInStock 

    attr_reader :isbn, :price 

    def initialize (isbn, price) 
    @isbn = isbn 
    @price = Float(price) 
    end 

    def price_in_cents 
    Integer(price*100 + 0.5) 
    end 

    def price_in_cents=(cents) 
    @price = cents/100.0 
    end 

    def price=(dollars) 
    price = dollars if dollars > 0 
    end 

end 

이 경우 나는 가격이 음수가 될 수 없도록 세터를 사용하고 있습니다. 내가 알고 싶은 것은 price_in_cents setter에서 가격 설정기를 호출 할 수 있다면 가격이 양수가 될 수 있도록 여분의 코드를 작성해야한다는 것입니다. 사전

+1

. 그냥 시도 해 봐. 루비에서는 놀랍게도 다른 메소드 안에 메소드를 정의 할 수도 있습니다 :-) –

답변

6

사용 self.setter에서

감사합니다, 즉 : 당신이 할 수 물론

def price_in_cents=(cents) 
    self.price = cents/100.0 
end 
+0

왜 자기가 필요합니까? 다른 인스턴스 메소드들로 self를 호출 할 필요가없는 반면 setter 인 메소드를 사용하면 –

+0

'foo = bar'는 메소드 호출이 아닌 변수 할당이기 때문에. 다른 경우들도 있습니다 :'+ foo'는'self + foo'가 아닌'foo. + @'입니다. –

관련 문제