Каково различие между этими двумя определениями инициализации класса Ruby?

Я работаю через книгу по 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
5
задан Greg Campbell 2 May 2010 в 18:09
поделиться

1 ответ

Поскольку метод установки был определен attr_accessor и, таким образом, ничего не делает, кроме установки переменной, нет никакой разницы между использованием установщика метод и установка переменной напрямую.

Единственным преимуществом использования метода установки является то, что если вы позже измените метод установки, чтобы сделать что-то большее, чем установка переменной (например, проверить ввод или что-то записать), ваш метод initialize будет затронутые этими изменениями, и вам не придется их менять.

9
ответ дан 14 December 2019 в 01:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: