欢迎!请查看关于页面以获取更多有关此功能的信息。
try在内部静默地接受相同类别的多个catch块,但只有第一个会被调用
user=> (try (/ 1 0) (catch Exception _ (println "a")) (catch Exception _ (println "b"))) a nil
评论由:schmee
我附上了一个补丁,该补丁通过让Clojure的try/catch语义更符合Java来修复这个问题。对于每个catch子句,编译器会检查是否存在先前的catch子句是当前子句的超类。如果是的话,会抛出IllegalArgumentException异常。这在大多数情况下n的值都较低时,且工作在解析时间完成时,它不会引起任何性能问题。
我不得不修改一个与之无关的测试,因为这个测试实际上有多个catch子句,它们都捕获了{{Exception}},而在这个补丁中不再允许这样做。