2012-12-05 65 views
4

我一直在通過實用程序員編程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 

在這種情況下,我使用setter來確保價格不能爲負數。我想知道的是,如果可以從price_in_cents setter中調用price setter,以便我不必編寫額外的代碼以確保價格是正數。

在此先感謝

+1

當然可以。去嘗試一下。在Ruby中,令人驚訝的是,你甚至可以在其他方法中定義方法:-) –

回答

6

使用self.setter,即:

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

爲什麼你需要自我。使用setter方法,而您不需要使用其他實例方法調用自己 –

+0

因爲'foo = bar'是變量賦值,而不是方法調用。還有其他一些情況:例如,'+ foo'是'foo。+ @',而不是'self + foo'。 –