gpt4 book ai didi

ruby - 调用 setter 和 getter

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

我有一个属性 :isbn 的 setter 和 getter 方法在类 Book 上:

class Book
attr_accessor :isbn
end

book01Book 的实例:

book01 = Book.new
  1. 在设置实例属性时,以下哪一种是首选方式?

    book01.isbn=("9876")
    book01.isbn= "9876"
    book01.isbn = "9876"
  2. 为什么这不能作为一种选择?

    book01.isbn("9876")
    # => ArgumentError: wrong number of arguments (1 for 0)

最佳答案

在你的例子中:

book01.isbn=("9876")
book01.isbn= "9876"
book01.isbn = "9876"

最后 2 个示例是“语法糖”,这些东西在技术上在语法上是不正确的,但保留在语言中,因为它们使代码更清晰。如果 Ruby 不支持语法糖,第一个示例是唯一可行的方法。为什么?

因为 attr_acccessor :isbn 在后台为您创建了以下代码:

def isbn
@isbn
end

def isbn=(new_isbn)
@isbn = new_isbn
end

这是 2 种完全不同的方法,这可能会造成混淆,因为名称上的唯一区别是 = 符号。但这并不意味着什么,也不会改变它们是完全不同方法的事实。因此:

book01.isbn=("9876")

你实际上是在调用 def isbn=(new_isbn) 这是一个方法,仅此而已。并且:

book01.isbn= "9876"
book01.isbn = "9876"

您只是在调用 SAME 方法,只是使用了“语法糖”。在幕后,Ruby 将所有这 2 个视为:

book01.isbn=("9876")

你能猜出为什么这段代码不起作用吗?

book01.isbn("9876")

因为,正如我们之前看到的,Ruby 在后台创建了 2 个方法。第一个方法不接受任何参数,因此,你会得到你得到的错误(Ruby 只是告诉你,我期望 0 个参数,而你提供了 1 个,因此我引发了 ArgumentError)。

关于ruby - 调用 setter 和 getter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26144366/

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