2012-11-26 13 views
2

如果我用彈弓的try+catch,很容易寫一個選擇,以配合在地圖上的內容:不過彈弓選擇語法趕上ExceptionInfo Clojure中

(defn dosomething (throw+ {:some :data})) 
(try+ (dosomething) 
    (catch [:some :data] ;; recover)) 

,如果我想使用ex-info,該catch選擇不匹配ExceptionInfo的數據:

(defn dosomething (throw (ex-info "A message" {:some :data}))) 

很顯然,我能趕上一個ExceptionInfo或編寫自定義謂詞匹配的數據,我只是想知道如果我失蹤SOMET關於彈弓或ex-info興奮,因爲我被認爲他們一起工作比這更順利。

回答

0

我不確定你爲什麼要拋出一個ExceptionInfo,我的理解是它只是任意數據的載體,你可以用throw +正常拋出。或者如果問題是你不想使用throw +,那麼我不認爲有一個完全直接的方法來捕獲它。如果你不想使用throw +,那麼我不認爲有一個完全直接的方法來捕獲它。你必須做一些像

(catch (-> % ex-data :some (= :data)) myerr (foo myerr)) 

我不知道該用例是什麼想使用try +而不是+扔。

+0

我並不渴望使用ex-info,它只是我閱讀的一些東西(例如http://technomancy.us/154)讓我相信ex-info取代了throw +,所以我認爲我錯過了一些東西。顯然不是,但 - 謝謝! :) – Thom

+0

最近版本的彈弓實際上會拋出ex-info例外 –