【发布时间】:2013-12-18 14:26:24
【问题描述】:
如何使用相同的 finally 块处理let 语句的绑定或正文中可能发生的异常?例如:
(let [connections (create-connections)]
(dostuff)
(close connections))
如果(create-connections) 或(dostuff) 失败,我想(close connections)。一些选项:
选项 1:
(try
(let [connections (create-connections)]
(dostuff))
(finally (close connections))
这显然不起作用,因为 connections 不在 finally 块的范围内。
选项 2:
(let [connections (create-connections)]
(try
(dostuff)
(finally (close connections)))
此选项仅捕获在 (destuff) 调用中发生的异常,而不是在 (create-connections) 中发生的异常。
选项 3:
(let [connections (try
(create-connections)
(finally (close connections)))]
(try
(dostuff)
(finally (close connections)))
这也不起作用,因为 connections 不在 let 绑定中 finally 语句的范围内。
那么处理这个问题的最佳方法是什么?
【问题讨论】:
-
你怎么可能关闭你未能创建的连接?只是没有意义。
标签: exception-handling clojure autocloseable