簡體   English   中英

Clojure 中的慣用錯誤處理

[英]Idiomatic error handling in Clojure

當我戴上我的 C 帽子時,我想也許慣用的 Clojure 只是做簡單的事情並檢查返回值。

當我戴上我的 Java 帽子(不情願地,我必須補充)時,我心里想,既然 Clojure 在 JVM 上運行,那么自然的方式必須是使用 JVM 異常。

當我戴上我的函數式帽子時,我在想一定有某種 monadic 構造或線程宏可以以可組合的方式處理錯誤。

那么在 Clojure 程序中處理錯誤的慣用方法是什么?

Clojure 錯誤處理通常面向 JVM 異常(未檢查)。

例如, Slingshot允許對拋出的異常值進行解構,從而使異常的使用更加愉快。

對於允許 erlang 風格錯誤處理的替代方案,您應該查看dire 這篇博文很好地概述了 dire 的合理性以及 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))

您可以看到,除了您不必手動檢查任何內容之外, nothingnil等效。

Clojure 中錯誤處理的官方方法是異常,因為它隨 JVM 一起提供。 但是,函數在拋出異常時不是引用透明的,並且此屬性也不是可組合的。 異常不起作用。

許多人在 Clojure 中嘗試了不同風格的替代/一元錯誤處理。 我為此目的創建了 Promenade https://github.com/kumarshantanu/promenade並且使用它有很好的經驗。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM