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 に答える