Я работаю через книгу по 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
Есть ли какое-либо функциональное различие между использованием метода установщика, как в первом примере, по сравнению с использованием переменной экземпляра как во втором? Они оба, кажется, работают. Даже смешивание их работает:
class Ticket
attr_accessor :venue, :date
def initialize(venue, date)
@venue = venue
self.date = date
end
end
Поскольку метод установки был определен attr_accessor
и, таким образом, ничего не делает, кроме установки переменной, нет никакой разницы между использованием установщика метод и установка переменной напрямую.
Единственным преимуществом использования метода установки является то, что если вы позже измените метод установки, чтобы сделать что-то большее, чем установка переменной (например, проверить ввод или что-то записать), ваш метод initialize
будет затронутые этими изменениями, и вам не придется их менять.