如何let
使用相同的 finally 块处理语句的绑定或正文中可能发生的异常?前任:
(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 语句的范围内。
那么处理这个问题的最佳方法是什么?