2024 Clojure状态调查!中分享您的想法。

欢迎!有关此如何工作的更多信息,请参阅关于页面。

0
编译器

try语句默默地接受同一类的多个catch块,但只会调用第一个

user=> (try (/ 1 0) (catch Exception _ (println "a")) (catch Exception _ (println "b"))) a nil

2个回答

0

评论由:schmee

我附上一个补丁,该补丁通过使Clojure的try/catch语义更接近Java来解决这个问题。对于每个catch子句,编译器会检查前面的catch子句是否是当前子句的超类型。如果是,则抛出IllegalArgumentException。这对于catch子句的数量是O(n^2),但由于n在大多数情况下都很低,并且该工作在解析时完成,因此不会引起任何性能问题。

由于这个补丁不再允许捕获{{Exception}},我必须修改一个无关的测试。

0
参考: https://clojure.atlassian.net/browse/CLJ-2181 (由 alex+import 报告)
...