見つけられなかったエラーで長い間髪を引っ掻いていただけです。それはアリティの例外であることが判明しましたが、どうやら EDT で発生したため、「見る」ことができませんでした。ターミナルから実行すると「lein run」ターミナルに表示されず、Emacs から実行すると Emacs バッファに表示されませんでした。
非常に長い時間の後、私はこれをやることになりました:
(try (function-call-with-arity-error ...) (catch Exception e (println e)
そして、ついに、これのおかげで、これが印刷されているのを見ることができました:
#<ArityException clojure.lang.ArityException: wrong number of args passed to...
したがって、エラーを見つけることができました。
そして、私がこれを行うと:
(do
(println "trying...")
(arity-error-here-on-purpose) ; this ones throws the arity error
(println "done")
)
次に、端末は「trying...」を出力しますが、「done...」にはなりません。
デフォルトのキャッチされない例外ハンドラーを設定しようとしました: 例外がキャッチされません。あたかもプログラムまたは EDT がアリティ例外の後に「スタック」したかのようです (どこにも何も表示されません)。
次回はどのように対処すればよいでしょうか。どこにもメッセージが表示されなかったので、見つけるのに非常に長い時間がかかりました。繰り返しますが、'lein run' ターミナルには何もありません。また、Emacs バッファーにも何もありません。
EDT で発生するはずの呼び出しを try / catch 手動でラップし、例外をログ/印刷する関数を作成する必要がありますか?
また、これは比較的「長い」Clojure アプリであることに注意してください: 1000 行のコードなので、ここに貼り付けることができず、短い例でその動作を再現できませんでした (ただし、私のアプリでは一貫して発生します)。