我正在尝试理解如何在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}"
答案 0 :(得分:2)
简而言之,因为
book.price
是一种采用ZERO参数返回书籍价格的方法。然而
book.price=
是设置值的ONE参数的方法。
后一种方法可以像这样调用:
book.price = 150
你试图用一个参数调用getter。您无法拨打book.price 150
。
答案 1 :(得分:0)
你这样做:
book.price = 150
属性读取器不接受任何参数,而book.price
不是作者的名称,即price=
。
如果你想把新价格作为一个更明显的参数传递给你的作家,一种方法是这样的调用:
book.send 'price=', 160