我正在通过阅读 Programming Ruby,实用程序员指南来学习Ruby。我真的很喜欢语法的简洁。
我无法理解=
在setter方法名称中的作用:
def price=(new_price)
@price = new_price
end
该功能定义与此有何不同:
def price(new_price)
=
有何不同?这本书说它可以直接分配。但是,使用普通的setter方法已经不可能没有=
......?
这是课程的其余部分:
class BookInStock
attr_reader :isbn
attr_accessor :price
def initialize(isbn, price)
@isbn = isbn
@price = Float(price)
end
end
book.price = book.price * 0.75
答案 0 :(得分:5)
它为您提供了编写代码的'语法糖',如下所示:
class Book
price=(new_price)
@price = new_price
# do something else
end
end
book = Book.new
book.price = 1
此代码将翻译为
book.price=(1)
实际上,attr_writer
和attr_accessor
方法会为您的班级生成 setter (price=
)方法(attr_reader
和attr_accessor
生成< em> getter 方法。)所以你的BookInStock
类类似于:
class BookInStock
def isbn val
@isbn = val
end
def price val
@price
end
def price= val
@price = val
end
def initialize(isbn, price)
@isbn = isbn
@price = Float(price)
end
end
只有在要添加一些逻辑(如验证)时,才需要使用=
编写方法。在其他情况下,只需使用attr_writer
或attr_accessor
。