欢迎!有关此功能的工作原理,请参阅关于页面获取更多信息。
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在绝大多数情况下将很低,并且这项工作是在解析时完成的,因此不应带来任何性能问题。
由于此补丁不再允许使用此补丁尝试多个捕获,我不得不修改一个无关的测试。