gpt4 book ai didi

clojure - 如何以更实用的方式从 Clojure catch block 中重现?

转载 作者:行者123 更新时间:2023-12-04 09:00:10 25 4
gpt4 key购买 nike

对于我正在编写的 IRC 机器人,我想继续尝试打开一个套接字,即使有 UnkownHostException .我的第一个想法是这样的。

(defn open-socket [{:keys [host port] :as connection}]
(try (java.net.Socket. host port)
(catch java.net.UnknownHostException _ (recur connection))))

但它不起作用,因为您不能从 catch 块中重现。所以我选择了这样的事情:
  (let [socket (promise)
_ (while (not (realized? socket))
(try (deliver socket (java.net.Socket. host port))
(catch java.net.UnknownHostException _)))
socket @socket]
...

这有效,但它非常必要。有没有更实用的方法可以做到这一点我看不到?

最佳答案

只需添加一个 or :

(defn open-socket [{:keys [host port] :as connection}]
(or (try (java.net.Socket. host port)
(catch java.net.UnknownHostException _ nil))
(recur connection)))

关于clojure - 如何以更实用的方式从 Clojure catch block 中重现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17257961/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com