Programming Clojure学习笔记——与Java一起工作

本文介绍Clojure中的异常处理方法,包括如何通过try..catch结构捕获并响应异常,利用with-open宏来自动关闭资源,确保文件或网络连接等非内存资源得到妥善释放。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

3.4  异常处理
异常处理的目的:
(1) 包装检查异常
(2) 使用finally块清理非内存资源如文件或网络句柄
(3) 响应问题:忽略异常,重新操作,转换异常为非异常结果

简化异常处理
在Clojure中,检查异常不是必须进行try..catch处理,如果不处理则直接忽略异常

资源清理
如果需要是否的资源有close方法,则可以使用with-open宏:
(with-open [name init-form] & body)
Clojure内部,with-open创建一个try块,将init-form的结果赋给name,然后运行body,最后在finally块中是否绑定到name的资源。如:
(defn spit [f content]
  (with-open [#^PrintWriter w (writer f)]
    (.print w content)))
(spit "hello.out" "hello, world")
将字符串"hello, world"写入文件hello.out

如果需要在finally块中做close以外事情,可以使用如下形式:
(try expr* catch-clause* finally-clause?)
; catch-clause -> (catch classname name expr*)
; finally-clause -> (finally expr*)

响应异常
最常见的情况是在catch块中响应异常。
示例:验证类是否可以
(defn class-available? [class-name]
   (try
      (Class/forName class-name) true
      (catch ClassNotFoundException _ false)))
如果类找不到,则抛出ClassNotFoundException异常,返回false
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值