Пожалуйста, не делай этого.Когда-либо.Но давайте научим людей, как стрелять себе в ногу:
class BasicObject
def self.new(*args)
if instance_methods.member? :initialise
allocate.initialise(*args)
else
super
end
end
end
Итак, что здесь происходит: мы просто переписали определение .new
.По умолчанию он вызывает #allocate
, а затем #initialize
, передавая *args
, который вы ему отправили.
.allocate
выделяет память для объекта, но не вызывает #initialize
поверх него, поэтому мыпроверьте, определен ли для объекта метод экземпляра #initialise
, вызывается ли он, в противном случае используется поведение по умолчанию (super
).