Ert*_*tin 3 lisp macros functional-programming clojure
我想包装由系统或用户抛出的异常(无关紧要)并强制它返回一些值.
我为它写了宏,但它不起作用.
宏:
(defmacro safe-fn
[form]
(try
`(do ~form)
(catch Throwable e
1)))
Run Code Online (Sandbox Code Playgroud)
用法: (safe-fn (throw (RuntimeException. "Try me!")))
实际产量: RuntimeException Try me! clojure-brave-and-true.core/eval2219 (form-init6122238559239237921.clj:1)
期望的输出: 1
宏只是返回要评估的代码的函数,因此您可以这样编写safe-fn:
(defmacro safe-fn
[form]
`(try
~form
(catch Throwable ~'_
1)))
Run Code Online (Sandbox Code Playgroud)
例:
(safe-fn (throw (RuntimeException. "Try me!")))
;=> 1
Run Code Online (Sandbox Code Playgroud)
有关宏的更多详细信息,请参阅我对此问题的回答,特别是使用它们来捕获异常.
| 归档时间: |
|
| 查看次数: |
194 次 |
| 最近记录: |