5

在以下代码中,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吗?应该怎么写?

4

1 回答 1

10

try特殊形式仅捕获在主体代码的动态范围期间引发的异常。这里map返回一个惰性序列,然后从try特殊形式传递出去并返回。打印机然后评估序列,并在此时抛出异常。

包装map进去doall应该可以解决您的问题。

于 2011-02-05T20:25:24.647 回答