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 ステートメントのスコープ外であるため、これも機能しません。
それで、これに対処する最善の方法は何ですか?