#ruby
#ruby
Вопрос:
Я пытаюсь понять, как использовать методы установки в Ruby, но я не понимаю, почему этот код не работает. Разве это не работает, потому что я уже установил цену book
, когда создавал объект 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}"
Ответ №1:
Короче говоря, потому что
book.price
это метод, принимающий НУЛЕВЫЕ аргументы, возвращающий цену книги. Однако
book.price=
это метод с ОДНИМ аргументом, который задает значение.
Последний метод можно вызвать следующим образом:
book.price = 150
Вы пытались вызвать средство получения с аргументом. Вы не можете вызвать book.price 150
.
Ответ №2:
Вы делаете это так:
book.price = 150
Считыватель атрибутов не принимает никаких параметров и book.price
не является именем автора, то price=
есть .
Если вы хотите передать новую цену в качестве более очевидного параметра для вашего writer, одним из способов может быть вызов, подобный этому:
book.send 'price=', 160