gpt4 book ai didi

clojure - 如何在 Clojure 宏中包装异常?

转载 作者:太空宇宙 更新时间:2023-11-03 18:41:25 25 4
gpt4 key购买 nike

我想包装系统或用户抛出的异常(无关紧要)并强制它返回一些值。

我为它写了宏,但它不起作用。

宏:

(defmacro safe-fn
[form]
(try
`(do ~form)
(catch Throwable e
1)))

用法:(safe-fn (throw (RuntimeException. "Try me!")))

实际输出:RuntimeException 试试我! clojure-brave-and-true.core/eval2219 (form-init6122238559239237921.clj:1)

期望的输出:1

最佳答案

宏只是返回待评估代码的函数,因此您可以这样编写 safe-fn:

(defmacro safe-fn
[form]
`(try
~form
(catch Throwable ~'_
1)))

例子:

(safe-fn (throw (RuntimeException. "Try me!")))
;=> 1

请参阅我对 this question 的回答有关宏的更多详细信息,特别是有关使用它们捕获异常的信息。

关于clojure - 如何在 Clojure 宏中包装异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37213306/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com