Відповіді:
До речі, альтернативним варіантом може бути щось на зразок:
(let ((error t))
(unwind-protect
(prog1 (call-function)
(setq error nil))
(when error (cleanup))))
Перевага полягає в тому, що ви уникаєте лову та повторного скидання помилки, а це означає, що, наприклад, налагоджувач покаже вам правильний зворотний шлях (той, що відповідає фактичному джерелу помилки, а не той, що відповідає вам, повторно викидаючи чужу помилку ).
Ще одна відмінність полягає в тому, що cleanup
буде викликано не тільки помилка, але й якщо код буде перервано a C-g
або закликом до throw
.
quit
не є error
серед батьків). IOW ви ван також зловити його , condition-case
але для цього вам потрібно покласти quit
разом з error
. Звичайно, це все ще не вирішить справу з кидком.
condition-case
зловитиkeyboard-quit
?