6

我正在阅读一本关于 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
4

1 回答 1

10

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

使用 setter 方法的唯一好处是,如果您以后应该更改 setter 方法以执行比设置变量更多的操作(例如验证输入或记录某些内容),您的initialize方法将受到这些更改的影响,而无需更改它.

于 2010-05-01T23:51:12.573 回答