我想捕获unbound-variable
异常并避免它们,即时创建一些变量而不会中断执行。我正在尝试在以下代码中使用handler-bind
with :invoke-restart
(defmacro my-progn (&rest rest)
`(handler-bind
((unbound-variable
(lambda (x)
(progn
;(format t "UNBOUND VAR: ~a~%"
; (symbol-name (cell-error-name x)))
(invoke-restart 'just-continue)))))
(progn ,@(mapcar (lambda (x)
`(restart-case ,x (just-continue () "XXXX"))) rest))))
(my-progn
(print "AAA")
(print xxxx) ;; xxxx is unbound
(print "BBB"))
结果是:
"AAA"
"BBB"
但我想继续执行 second print
,只需将未绑定的变量 xxxx 替换为字符串“XXXX”:
"AAA"
"XXXX"
"BBB"
当然,我可以用 包裹语法树中的任何符号handler-bind
,但我担心这会产生巨大的开销。
有没有办法捕获unbound-variable
异常并使用动态生成的值而不是丢失的变量继续执行代码?