ich ein langen Laufe Vermächtnis rubin-Programm übergeben wurde, die zahlreichen Vorkommen vonCapturing Ctrl-c in Ruby
begin
#dosomething
rescue Exception => e
#halt the exception's progress
end
überall hat.
Ohne Tracking jede einzelne mögliche Ausnahme nach unten diese jeweils Handhabung werden könnte (zumindest nicht sofort), würde ich immer noch in der Lage sein mag manchmal mit CtrlC herunterzufahren.
Und ich möchte dies in einer Weise tun, die nur auf den Code fügt hinzu (so dass ich nicht das bestehende Verhalten beeinflussen oder eine sonst abgefangene Ausnahme in der Mitte eines Laufs verpassen.)
[CtrlC ist SIGINT oder SystemExit, die SignalException.new("INT")
in Rubys Ausnahmebehandlungssystem entspricht. class SignalException < Exception
, weshalb dieses Problem aufkommt]
Der Code wäre ich geschrieben haben möchte.
begin
#dosomething
rescue SignalException => e
raise e
rescue Exception => e
#halt the exception's progress
end
EDIT: Dieser Code funktioniert, solange man die Klasse der Ausnahme erhalten Sie möchten korrekt abfangen. Das ist entweder SystemExit, Interrupt oder IRB :: Abort wie folgt.
Wayne, würden Sie so freundlich sein, ein IRB :: Abort-Beispiel zu Ihrer Liste hinzuzufügen? –
@Tim, gehe zu irb.rb (auf meinem System ist es in /usr/lib/ruby/1.8/irb.rb) und finde die Hauptschleife (suche nach @ context.evaluate). Schauen Sie sich die Rettungsklauseln an und ich denke, Sie werden verstehen, warum sich IRB so verhält wie es tut. –
danke. Ein Blick auf die Definition für #signal_handle in irb.rb hat mir ebenfalls geholfen. Sie haben einen ordentlichen Trick in der Hauptschleife ist die Ausnahme Variable Bindung. (Verwenden Sie die Rescue-Klauseln als eine Möglichkeit, eine bestimmte Ausnahme auszuwählen, dann diese Ausnahme außerhalb der Rettungskörper.) –