You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Clojure的try-catch循环中返回值?(Socket重试场景)

解决Clojure循环重试并返回成功结果的问题

原代码返回nil的原因是:when-not只会在它的测试表达式为假时执行recur,而你的try块返回的6是真值,所以when-not不会触发循环,但整个loop表达式在执行完when-not后没有显式返回任何值,最终默认返回nil。

要实现“成功时返回结果,失败则重试”的逻辑,直接调整loop内的结构,让成功的分支直接返回结果,异常分支触发重试即可:

(loop []
  (try
    ;; 这里替换成实际创建Socket的逻辑
    6
    (catch Exception e
      (.println *err* (str e))
      (recur))))

这段代码的逻辑是:

  • 每次进入循环,先执行try块里的代码(创建Socket或返回6)
  • 如果执行成功,直接返回该结果(6或创建好的Socket),循环结束
  • 如果抛出异常,打印错误信息后调用recur重新执行循环

测试这段代码会直接返回6,完全符合需求。

内容的提问来源于stack exchange,提问作者Samuel Squire

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 00:13:10