Ruby: initialize() vs class body?
В Ruby, в чем разница между помещением кода в метод initialize()
, а не непосредственно в тело класса? Оба они выполняются при вызове MyClass.new
.
Ясно, что initialize()
может принимать параметры, но является ли это единственной разницей?
class MyClass
puts 'Hello'
def initialize(params)
puts 'World'
end
end
Ответы
Ответ 1
Попробуйте создать два экземпляра MyClass
a = MyClass.new
b = MyClass.new
чтобы увидеть разницу:
Привет
Мир
Мир
Код в классе класса выполняется только один раз - когда ruby загружает файл. initialize() выполняется каждый раз при создании нового экземпляра вашего класса.
Ответ 2
Ну, initialize
вызывается new
, тогда как тело класса оценивается по определению класса/загрузке.
Кроме того, попробуйте установить переменную экземпляра в тело класса или в initialize
. Вы заметите, что последний будет принадлежать созданному объекту, тогда как первый будет принадлежать экземпляру класса (следовательно, переменной экземпляра класса имен).
Ответ 3
если вы пишете код в теле тела, он будет выполнен, когда ruby загрузит этот класс, загрузка может произойти только один раз. И инициализация будет выполняться только тогда, когда вы создадите экземпляр класса, и он будет выполняться каждый раз, когда вы вызываете new в класс.
теперь, когда вы делаете MyClass.new ruby загружает класс MyClass, он будет искать класс в памяти, если он не загружает этот класс, а затем вызовет его новый метод для создания instanc