以下几行出现在 http://aosabook.org/en/riak.html 中,在该部分的第二段: 15.1. Erlang 简介 :
"Calling the function with a negative number will result in a run time error, as none of the clauses match. Not handling this case is an example of non-defensive programming, a practice encouraged in Erlang."
两个问题:在Erlang中处理由此产生的错误的惯用方式是什么?为什么这比明确涵盖所有情况更好,如在 OCaml 或 Haskell 之类的语言中?
最佳答案
如果您不为错误情况编写任何代码,让系统生成运行时错误,您至少会获得 3 个优势:
现在您可以专注于错误管理:您将在哪里处理错误。 Erlang 提供了经典方式
try
和 catch
语句,并具有更惯用的方式与 OTP 监督树和链接和监视机制。简而言之,您可以控制一个进程崩溃的后果(哪些进程会随之崩溃,哪些进程将被通知)以及重新启动它们的复杂方法。
重要的是要记住,在 erlang 中,您通常会启动许多小进程,这些进程的作用和责任非常有限,在这种情况下,让它们崩溃并重新启动确实很有意义。
我是 learnyousomeerlang 的粉丝您将在其中找到与错误管理相关的 3 章的网站:
关于erlang - Erlang 中的非防御性编程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32815326/