Suppose I got in a Dialog
and wanted to not Return
but Abort
the computation. How could I do that?
Using Return[]
the computation continues, and sometimes that implies getting inside countless other Dialog
s of which it is not easy to go out without killing the kernel.
How do you handle those situations?
Answer
I use ExitDialog@Unevaluated@Abort[]
If your dialog is unhappily inside a CheckAbort
you can go for exceptions like ExitDialog@Unevaluated@Throw["OOOUT", Unique[]]
for example.
In this way, tools like TraceDialog
become very useful. TraceDialog[code, Message]
is something I use often, to see the Stack
, the state, etc
Note that this only aborts one level. If you want 2 levels you could do ExitDialog@Unevaluated@ExitDialog@Unevaluated@Abort[]
For a general way to abort all dialogs of any level at once, one could do
Apply[Composition,
ConstantArray[Function[i, ExitDialog@Unevaluated@i, HoldFirst],
DialogLevel[]]][Unevaluated@Abort[]]
Comments
Post a Comment