我正在阅读一本关于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
答案 0 :(得分:9)
由于setter方法已由attr_accessor
定义,因此只设置变量,因此使用setter方法和直接设置变量之间没有区别。
使用setter方法的唯一好处是,如果你以后应该更改setter方法来做更多的事情而不是设置变量(比如验证输入或记录某些东西),你的initialize
方法会受到影响这些变化无需你改变它。