Mi è stato approvato un programma ruby legacy di lunga durata, che ha numerose occorrenze di
begin
#dosomething
rescue Exception => e
#halt the exception's progress
end
in tutto esso.
Senza rintracciare ogni singola possibile eccezione che ciascuno di essi potrebbe gestire (almeno non immediatamente), mi piacerebbe comunque essere in grado di spegnerlo a volte con CtrlC.
E mi piacerebbe farlo in un modo che si aggiunga solo al codice (quindi non influisco sul comportamento esistente o perdo un'eccezione altrimenti rilevata nel bel mezzo di una corsa).
[ CtrlCè SIGINT, o SystemExit, che sembra essere equivalente al SignalException.new("INT")
sistema di gestione delle eccezioni di Ruby. class SignalException < Exception
, motivo per cui si presenta questo problema.]
Il codice che vorrei scrivere sarebbe:
begin
#dosomething
rescue SignalException => e
raise e
rescue Exception => e
#halt the exception's progress
end
EDIT: questo codice funziona, purché si ottenga la classe dell'eccezione che si desidera intercettare correttamente. Può essere SystemExit, Interrupt o IRB :: Abort come di seguito.