Подтвердить что ты не робот

Что делает метод инициализации в рельсах

Я пытаюсь обвести голову вокруг использования метода initialize. В учебнике Hartl он использует пример.

def initialize(attributes = {})
   @name = attributes[:name]
   @email = attributes[:email]
end

Инициализирует параметры экземпляра @name и @email для атрибутов, и если да, то почему у нас есть аргумент attributes = {}?

4b9b3361

Ответ 1

Ruby использует метод initialize как конструктор объекта. Это часть языка Ruby, не относящаяся к структуре Rails. Он вызывается, когда вы создаете новый объект, например:

@person = Person.new

Вызов метода класса new на уровне Class выделяет тип этого класса, а затем вызывает метод initialize:

http://www.ruby-doc.org/core-1.9.3/Class.html#method-i-new

Все объекты имеют метод initialize по умолчанию, который не принимает никаких параметров (вам не нужно писать один - вы получите его автоматически). Если вы хотите, чтобы ваш объект делал что-то другое в методе initialize, вам нужно определить его собственную версию.

В вашем примере вы передаете хэш методу initialize, который может использоваться для установки значения по умолчанию @name и @email.

Вы используете это, например:

@person = Person.new({name: 'John Appleseed', email: '[email protected]'})

Причина, по которой инициализатор имеет значение по умолчанию для атрибутов (attributes = {} устанавливает значение по умолчанию для хэша aute - {}), так что вы также можете вызвать его, не передавая аргумент. Если вы не укажете аргумент, то attributes будет пустым хешем, и поэтому значения @name и @email будут nil, поскольку для этих ключей не существует значения (:name и :email).