3

私はClojureでエラー処理を行うための適切な方法を見つけるのに苦労しており、このテーマに関するいくつかの考えが好きです。

エラー処理のない例を考えてみましょう。

(defn do-stuff
   (let [result1 (some-function) 
         result2 (other-function)
         result3 (yet-another-function)]
   {:status 200
    :body (foo result1 result2 result3)}))

どこかにエラーがある場合は、以下を返す必要があります。

 {:status 4xx
  :body "Some descriptive error message, based on what went wrong"}

result1-3がfooに渡される前に有効であることを確認するにはどうすればよいですか?

letブロック内の関数の1つで問題が発生した場合(これらの関数内でエラーを処理する適切な方法がないと仮定して)、do-stuffで処理される例外をスローする必要がありますか?

4

1 に答える 1

4

それらが例外をスローした場合、letの外でそれらをキャッチできます。

(defn do-stuff
  (try
   (let [result1 (some-function) 
         result2 (other-function)
         result3 (yet-another-function)]
   {:status 200
    :body (foo result1 result2 result3)})
   (catch MyException e
     {:status 4xx
      :body (str "Some descriptive error message, " (.getMessage e)})
于 2012-09-27T19:16:31.410 に答える