[英]Idiomatic error handling in Clojure
當我戴上我的 C 帽子時,我想也許慣用的 Clojure 只是做簡單的事情並檢查返回值。
當我戴上我的 Java 帽子(不情願地,我必須補充)時,我心里想,既然 Clojure 在 JVM 上運行,那么自然的方式必須是使用 JVM 異常。
當我戴上我的函數式帽子時,我在想一定有某種 monadic 構造或線程宏可以以可組合的方式處理錯誤。
那么在 Clojure 程序中處理錯誤的慣用方法是什么?
對於一個非常實用的方法,看看cats
,它對應於“某種一元結構”:
Clojure 和 ClojureScript 的范疇論和代數抽象。 http://funcool.github.io/cats/latest/
從他們的文檔中獲取的示例:
(require '[cats.core :as m])
(require '[cats.monad.maybe :as maybe])
(m/mappend (maybe/just [1 2 3])
(maybe/nothing)
(maybe/just [4 5 6])
(maybe/nothing))
您可以看到,除了您不必手動檢查任何內容之外, nothing
與nil
等效。
Clojure 中錯誤處理的官方方法是異常,因為它隨 JVM 一起提供。 但是,函數在拋出異常時不是引用透明的,並且此屬性也不是可組合的。 異常不起作用。
許多人在 Clojure 中嘗試了不同風格的替代/一元錯誤處理。 我為此目的創建了 Promenade https://github.com/kumarshantanu/promenade並且使用它有很好的經驗。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.