Clojure > Archives > 2010/05/22

2010/05/22 08:53:59 UTCfatrow
#
user> (try (apply +) (catch java.lang.Throwable e e))
#<IllegalArgumentException java.lang.IllegalArgumentException: Wrong number of args passed to: core$apply>
#
この例外はちゃんと捕捉できるんですけど、
#
user> (try (map apply [+]) (catch java.lang.Throwable e e))
; Evaluation aborted.
#
これは何でか捕捉できないんです。何かjavaの基本的な知識を見逃しているんだと思うんですけど何故なんでしょうか。
2010/05/22 10:32:37 UTCfatrow
#
解決しました。遅延評価されてるので try の中では例外が発生せず REPL に表示しようとした時に例外が発生したんですね。納得。
#
user> (try (doall (map apply [+])) (catch java.lang.Exception e e))
#<RuntimeException java.lang.RuntimeException: java.lang.IllegalArgumentException: Wrong number of args passed to: core$apply>
#
doall してやればちゃんと捕捉できました。
2010/05/22 10:38:18 UTCfatrow
#
でも、doall 使わないで遅延評価のままだとtry catch をあちこちにばら蒔かないといけないからちょっとやだなぁ