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

Ruby: initialize() vs class body?

В Ruby, в чем разница между помещением кода в метод initialize(), а не непосредственно в тело класса? Оба они выполняются при вызове MyClass.new.

Ясно, что initialize() может принимать параметры, но является ли это единственной разницей?

class MyClass
  puts 'Hello'

  def initialize(params)
    puts 'World'
  end
end
4b9b3361

Ответ 1

Попробуйте создать два экземпляра MyClass

a = MyClass.new
b = MyClass.new

чтобы увидеть разницу:

Привет

Мир

Мир

Код в классе класса выполняется только один раз - когда ruby ​​загружает файл. initialize() выполняется каждый раз при создании нового экземпляра вашего класса.

Ответ 2

Ну, initialize вызывается new, тогда как тело класса оценивается по определению класса/загрузке.

Кроме того, попробуйте установить переменную экземпляра в тело класса или в initialize. Вы заметите, что последний будет принадлежать созданному объекту, тогда как первый будет принадлежать экземпляру класса (следовательно, переменной экземпляра класса имен).

Ответ 3

если вы пишете код в теле тела, он будет выполнен, когда ruby ​​загрузит этот класс, загрузка может произойти только один раз. И инициализация будет выполняться только тогда, когда вы создадите экземпляр класса, и он будет выполняться каждый раз, когда вы вызываете new в класс.

теперь, когда вы делаете MyClass.new ruby ​​загружает класс MyClass, он будет искать класс в памяти, если он не загружает этот класс, а затем вызовет его новый метод для создания instanc