Я пытаюсь создать API для динамических процессов перезагрузки; прямо сейчас я нахожусь в точке, где я хочу предоставить во всех контекстах метод с именем reload!
, однако я реализую этот метод для объекта, который имеет некоторое состояние (поэтому он не может быть в ядре).
Предположим, у нас есть что-то вроде
WorkerForker.run_in_worker do
# some code over here...
reload! if some_condition
end
Внутри метода run_in_worker
есть код, подобный следующему:
begin
worker = Worker.new(pid, stream)
block.call
rescue NoMethodError => e
if (e.message =~ /reload!/)
puts "reload! was called"
worker.reload!
else
raise e
end
end
Так что я делаю это таким образом, потому что я хочу сделать метод reload!
доступным в любом вложенном контексте, и я не хочу связывать получаемый блок с instance_eval
на worker
экземпляр.
Итак, мой вопрос: есть ли какие-либо сложности в отношении этого подхода? Я не знаю, сделал ли кто-нибудь это уже (еще не читал так много кода), и если это уже было сделано? Есть ли лучший способ достичь цели этого кода?