试图在Ruby中设置实例变量
我正在通过阅读实用程序员指南编程Ruby来学习Ruby 。 我真的很喜欢语法的简洁。
我无法理解set在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
它为您提供了编写代码的“语法糖”,如下所示:
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
生成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
只有当你要在其中添加一些逻辑时才需要用=
编写方法(比如validation)。 在其他情况下,只需使用attr_writer
或attr_accessor
。