在下面的代码中,Clojure(1.2)正在打印错误的消息:
(try
(let [value "1,a"]
(map #(Integer/parseInt %) (.split value ",")))
(catch NumberFormatException _ (println "illegal argument")))
这应该打印“非法参数”,而是打印(1#<NumberFormatException java.lang.NumberFormatException: For input string: "a">
。
我做错了什么?
这是因为map
返回的延迟序列吗?怎么写呢?
答案 0 :(得分:10)
try
特殊表单仅捕获在正文代码的动态范围期间引发的异常。这里map
返回一个惰性序列,然后从try
特殊形式传递并返回。然后打印机评估序列,并在此时抛出异常。
将map
包裹在doall
中可以解决您的问题。