Erlang中的非防御性编程

Vin*_*iti 5 erlang

以下几行出现在http://aosabook.org/en/riak.html,本节第二段:15.1.Erlang简介:

"使用负数调用函数将导致运行时错误,因为没有一个条款匹配.不处理这种情况就是非防御性编程的一个例子,这是Erlang鼓励的做法."

两个问题:在Erlang中处理结果错误的惯用方法是什么?为什么这比明确覆盖所有情况要好,如OCaml或Haskell等语言?

Pas*_*cal 8

如果您没有为错误情况编写任何代码,让系统生成运行时错误,您将获得至少3个优势:

  • 代码更小,更易于阅读,专注于实现的功能.

  • 在错误的情况下,系统将引发符合OTP标准的错误,您将受益于免费的所有OTP机制来处理适当级别的情况.

  • 您自动避免"烤宽面条"错误检测综合症,其中许多代码层跟踪相同的错误情况.

现在您可以专注于错误管理:您将在哪里处理错误.Erlang提供了使用trycatch语句的经典方式,并且使用OTP监督树以及链接和监视器机制具有更加惯用的方式.

简而言之,您可以控制一个进程崩溃的后果(哪些进程将崩溃,哪些进程将被通知)以及重新启动它们的复杂方法.

重要的是要记住,在erlang中,你通常会启动许多角色非常有限的小进程,在这种情况下,让它们崩溃和重启真的很有意义.

我是learnyousomeerlang网站的粉丝,您可以在其中找到与错误管理相关的3章:

  • 错误和例外
  • 错误和过程
  • 谁监督主管?