Вопрос: Ruby: initialize () vs class body?


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

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

class MyClass
  puts 'Hello'

  def initialize(params)
    puts 'World'
  end
end

37


источник


Ответы:


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

a = MyClass.new
b = MyClass.new

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

Здравствуйте

Мир

Мир

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


60



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

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


8



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

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


3