这个问题实际上是关于我对重新启动缺乏了解。
在编码器中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"}
我该如何使用该宏来做到这一点?换句话说,我希望在引发错误的地方而不是在捕获错误的地方重新启动。我可以这样做吗?