【发布时间】:2020-10-02 17:25:57
【问题描述】:
这个问题真的是我对重启缺乏了解。
在cl-json 的编码器中有一个我想使用的诱人宏
with-substitute-printed-representation-restart
但是我不太明白怎么做。
这个
(cl-json::encode-json-plist (list :boo "boo" :foo "foo"))
返回
{"boo":"boo","foo":"foo"}
这个
(cl-json::encode-json-plist (list :boo "boo" :foo (lambda (a b) (+ a b))))
表示 UNENCODABLE-VALUE-ERROR
我想从 cl-json 找到函数并让它返回的那一点重新开始 当它遇到我包含在列表中的添加 lambda 时,我选择了一些东西。
(defun my-func ()
(handler-bind ((cl-json::UNENCODABLE-VALUE-ERROR
#'(lambda (e) (invoke-restart 'return-default))))
(myencode (list :boo "boo" :foo (lambda (a b) (+ a b))))
)
)
(defun myencode (alist)
(restart-case
(cl-json::encode-json-plist-to-string alist)
(return-default () :report "Just return a default could not do this string" "barf")
)
)
返回“barf”
我希望它返回
{"boo":"boo","foo":"barf"}
如何使用该宏来执行此操作? 换句话说,我希望在引发错误的地方而不是在捕获错误的地方重新启动。我可以这样做吗?
【问题讨论】:
标签: lisp common-lisp restart condition-system