私が書いているIRCボットについては、UnkownHostException
があっても、ソケットを開こうとしています。私の最初の考えは、このようなものでした。Clojure catchブロックをより機能的に再帰させるにはどうすればよいですか?
(defn open-socket [{:keys [host port] :as connection}]
(try (java.net.Socket. host port)
(catch java.net.UnknownHostException _ (recur connection))))
しかし、キャッチブロックから再発することはできないため、機能しません。代わりに、私はこのようなものに解決しました:
(let [socket (promise)
_ (while (not (realized? socket))
(try (deliver socket (java.net.Socket. host port))
(catch java.net.UnknownHostException _)))
socket @socket]
...
これはうまくいかなければなりません。私が見ることができないより機能的な方法がありますか?
賢いです!ありがとう! – mybuddymichael