gpt4 book ai didi

ruby - 这两个 Ruby 类初始化定义有什么区别?

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

我正在阅读一本关于 Ruby 的书,作者在编写类初始化定义时使用的形式与他在本书前几节中使用的形式略有不同。它看起来像这样:

class Ticket
attr_accessor :venue, :date
def initialize(venue, date)
self.venue = venue
self.date = date
end
end

在本书的前几节中,它的定义如下:

class Ticket
attr_accessor :venue, :date
def initialize(venue, date)
@venue = venue
@date = date
end
end

在第一个示例中使用 setter 方法与在第二个示例中使用实例变量之间是否存在任何功能差异?他们似乎都有效。即使将它们混合起来也有效:

class Ticket
attr_accessor :venue, :date
def initialize(venue, date)
@venue = venue
self.date = date
end
end

最佳答案

由于 setter 方法已由 attr_accessor 定义,因此除了设置变量外什么都不做,因此使用 setter 方法与直接设置变量没有区别。

使用 setter 方法的唯一好处是,如果您以后要更改 setter 方法来做一些比设置变量更多的事情(比如验证输入或记录一些东西),您的 initialize 方法将无需更改即可受这些更改的影响。

关于ruby - 这两个 Ruby 类初始化定义有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2751930/

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