gpt4 book ai didi

ruby - 试图在 Ruby 中设置实例变量

转载 作者:数据小太阳 更新时间:2023-10-29 08:33:49 25 4
gpt4 key购买 nike

我正在通过阅读 Programming Ruby, the Pragmatic Programmers Guide 来学习 Ruby。我真的很喜欢语法的简洁。

我无法理解 = 在 setter 方法名称中的作用:

def price=(new_price)
@price = new_price
end

函数定义与此有何不同:

def price(new_price)

= 有什么区别?这本书说它使直接赋值成为可能。但是使用没有 =... 的普通 setter 方法已经是可能的了?

这是类(class)的其余部分:

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_writerattr_accessor 方法为您的类生成 setter (price=) 方法 ( attr_readerattr_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

只有在要向其中添加一些逻辑(如验证)时,才需要使用 = 编写方法。在其他情况下,只需使用 attr_writerattr_accessor

关于ruby - 试图在 Ruby 中设置实例变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8616513/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com