gpt4 book ai didi

exception - Clojure 中的自定义异常?

转载 作者:行者123 更新时间:2023-12-03 06:12:21 26 4
gpt4 key购买 nike

我一直在尝试在 Clojure 中创建用户定义的异常,但遇到了各种各样的问题。我尝试了这里概述的方法:

http://en.wikibooks.org/wiki/Clojure_Programming/Concepts#User-Defined_Exceptions

(gen-and-load-class 'user.MyException :extends Exception)

但这似乎在 Clojure 1.2 中不起作用(或者我做错了什么......)。我的环境是 Clojure 1.2、Emacs 和 lein swank。

感谢您的帮助!

最佳答案

有两种更简单的方法来使用自定义异常,而不是生成自定义类:

  1. 使用slingshot - 这提供了自定义的 throw+catch+ 宏,让您可以抛出和捕获任何对象以及异常。

  2. 在 clojure 1.4 及更高版本中,您可以使用 clojure.core/ex-infoclojure.core/ex-data生成并捕获 clojure.lang.ExceptionInfo 类,该类包装消息和数据映射。

使用起来很简单:

(throw (ex-info "My hovercraft is full of eels"
{:type :python-exception, :cause :eels}))

(try (...)
(catch clojure.lang.ExceptionInfo e
(if (= :eels (-> e ex-data :cause))
(println "beware the shrieking eels!")
(println "???"))))

或者在 midje 测试中:

(fact "should throw some eels"
(...)
=> (throws clojure.lang.ExceptionInfo
#(= :eels (-> % ex-data :cause))))

关于exception - Clojure 中的自定义异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3835331/

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