2011-10-29 44 views
1

我想了解如何在Ruby中使用setter方法,但我不明白爲什麼這段代碼不起作用。這是不是工作,因爲當我創建書籍對象時,他已經將他的價格設置爲book?如果我將問題行更改爲book.price = book.price + 10.00,則按預期工作。爲什麼?爲什麼我不能只通過傳入不同的參數來改變值?爲什麼我不能設置像這樣的實例變量的值

class BookInStock 
    attr_reader :isbn 
    attr_accessor :price 

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

    def isbn 
     @isbn 
    end 


    def to_s 
     "ISBN: #{@isbn}, price: #{@price}" 
    end 

end 

book = BookInStock.new("isbn",38.5) 
puts "The books cost: #{book.price} and the name is: #{book.isbn}" 
book.price = book.price 150 # THIS LINE IS BROKEN WHY? 
puts "The new price is " 
puts "The new price of the book is #{book.price}" 

回答

2

總之,因爲

book.price 

正在ZERO參數返回書的價格的方法。然而,

book.price= 

是ONE參數的方法,它設置值。

後一種方法可以這樣調用:

book.price = 150 

你試圖調用帶參數的吸氣劑。您不能撥打book.price 150

+0

啊,我現在看到的! – lampShade

0

你不喜歡這樣:

book.price = 150 

屬性讀者不帶任何參數和book.price不是作家的名字,這是price=

如果你想通過新的價格作爲一個比較明顯的參數,以你的作家,一個辦法是這樣一個電話:

book.send 'price=', 160 
相關問題