2015-09-28 35 views
4

以下行出現在http://aosabook.org/en/riak.html的第二段:15.1。一種簡化介紹二郎Erlang的非防禦性編程

「調用帶有負數的功能會導致運行時錯誤,因爲沒有任何條款比賽不處理這種情況下是不可防禦式編程的一個例子,在Erlang鼓勵實踐。「

兩個問題:在Erlang中處理結果錯誤的慣用方式是什麼?爲什麼這會比明確涵蓋所有情況更好,如OCaml或Haskell等語言?

回答

8

如果沒有錯誤的情況下代碼,讓系統產生一個運行時錯誤你得到至少3個優點:

  • 代碼更小,更易於閱讀,專注於實現的功能。

  • 在錯誤的情況下,系統會提出符合OTP標準的錯誤,您將免費獲得所有OTP機制來處理適當級別的情況。

  • 您自動避免了「lasagna」錯誤檢測綜合症,其中許多代碼層跟蹤相同的錯誤情況。

現在您可以專注於錯誤管理:您將在哪裏處理錯誤。 Erlang提供了使用trycatch語句的經典方法,並且具有OTP監督樹和鏈接和監視機制的更習慣的方式。

簡而言之,您可以控制一個進程崩潰(哪些進程會隨之崩潰,哪些進程將被通知)以及複雜的手段來重新啓動它們。

請務必記住,在erlang中,通常會啓動許多具有非常有限角色責任的小進程,在這種情況下,讓它們崩潰並重新啓動確實很有意義。

我是learnyousomeerlang網站,在那裏你會發現3個相關的錯誤管理章節的粉絲:

  • 錯誤和異常
  • 錯誤和流程
  • 誰監督監事?