gpt4 book ai didi

clojure - 为什么从 Clojure 中的 catch 部分重复是非法的

转载 作者:行者123 更新时间:2023-12-04 08:51:01 25 4
gpt4 key购买 nike

至少已经有 one answered question关于异常复发。我的问题是为什么这个 recur Clojure 编译器不接受

(loop []
(try
(catch Exception _ex
(recur))))

错误“只能从尾部位置重复”。

根据控制流程这个 recur处于尾部位置,因为代码在 recur 之后什么也不做内 loop形式。

最佳答案

如果在询问“为什么会这样?”时,您是在询问历史,那么将这个问题发布到 Clojure 邮件列表 clojure@googlegroups.com 可能会得到更好的答案。 .我怀疑原因是编译器作者从未考虑过这个用例。

如本示例所示,您可以很容易地模拟您想要的行为。它不像之前链接的问题中的大多数答案那样使用宏:

    (loop [count 5]
(newline)
(println "top of loop; count=" count)
(let [caught-ex (try
(println "in try")
(/ 1 0)
false
(catch Exception ex
(println " in catch; count=" count " cause: " (.getMessage ex))
true))]
(when (and caught-ex
(pos? count))
(recur (dec count)))))

结果:
top of loop; count= 5
in try
in catch; count= 5 cause: Divide by zero

top of loop; count= 4
in try
in catch; count= 4 cause: Divide by zero

top of loop; count= 3
in try
in catch; count= 3 cause: Divide by zero

top of loop; count= 2
in try
in catch; count= 2 cause: Divide by zero

top of loop; count= 1
in try
in catch; count= 1 cause: Divide by zero

top of loop; count= 0
in try
in catch; count= 0 cause: Divide by zero

关于clojure - 为什么从 Clojure 中的 catch 部分重复是非法的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44719375/

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