Мені було передано тривалу рубінну програму, яка має численні випадки
begin
#dosomething
rescue Exception => e
#halt the exception's progress
end
по всьому.
Не відслідковуючи жодного можливого винятку, з цим можна було попрацювати (принаймні, не відразу), я все одно хотів би час від часу його вимикати CtrlC.
І я хотів би зробити це таким чином, який додає лише до коду (тому я не впливаю на існуючу поведінку або пропускаю інакше спійманий виняток у середині пробігу.)
[ CtrlCє SIGINT, або SystemExit, що, як видається, еквівалентно SignalException.new("INT")
системі оброблення виключень Ruby. class SignalException < Exception
, тому виникає ця проблема.]
Я б хотів написати код:
begin
#dosomething
rescue SignalException => e
raise e
rescue Exception => e
#halt the exception's progress
end
РЕДАКТУВАННЯ: Цей код працює, якщо ви отримаєте клас винятку, який ви хочете виправити. Це або SystemExit, Interrupt, або IRB :: Скасувати, як показано нижче.