欢迎!有关此如何工作的更多信息,请参阅关于页面。
try语句默默地接受同一类的多个catch块,但只会调用第一个
user=> (try (/ 1 0) (catch Exception _ (println "a")) (catch Exception _ (println "b"))) a nil
评论由:schmee
我附上一个补丁,该补丁通过使Clojure的try/catch语义更接近Java来解决这个问题。对于每个catch子句,编译器会检查前面的catch子句是否是当前子句的超类型。如果是,则抛出IllegalArgumentException。这对于catch子句的数量是O(n^2),但由于n在大多数情况下都很低,并且该工作在解析时完成,因此不会引起任何性能问题。
由于这个补丁不再允许捕获{{Exception}},我必须修改一个无关的测试。