Erlang中的非防御性编程

Erlang中的非防御性编程,erlang,Erlang,本节第二段中出现以下行:15.1。Erlang简介摘要: 使用负数调用函数将导致运行时错误,因为所有子句都不匹配。不处理这种情况是非防御性编程的一个例子,Erlang鼓励这种做法 两个问题:在Erlang中,处理由此产生的错误的惯用方法是什么;为什么这比显式地覆盖所有情况要好,比如在OCaml或Haskell这样的语言中?如果您不为错误情况编写代码,让系统生成运行时错误,您至少可以获得3个优势: 代码更小,更容易阅读,着重于函数的实现 在发生错误的情况下,系统将提出符合OTP标准的错误,您将从

本节第二段中出现以下行:15.1。Erlang简介摘要

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


两个问题:在Erlang中,处理由此产生的错误的惯用方法是什么;为什么这比显式地覆盖所有情况要好,比如在OCaml或Haskell这样的语言中?

如果您不为错误情况编写代码,让系统生成运行时错误,您至少可以获得3个优势:

  • 代码更小,更容易阅读,着重于函数的实现

  • 在发生错误的情况下,系统将提出符合OTP标准的错误,您将从所有OTP机制中获益,从而在适当的级别处理这种情况

  • 您可以自动避免“千层面”错误检测综合症,即许多代码层跟踪相同的错误情况

现在您可以专注于错误管理:您将在哪里处理错误。Erlang通过
try
catch
语句提供了经典的方法,并通过OTP监督树和链接与监视机制提供了更为惯用的方法

简单地说,您可以控制一个进程崩溃的后果(哪些进程将因此崩溃,哪些进程将得到通知),并有复杂的方法重新启动它们

重要的是要记住,在erlang中,您通常会启动许多小流程,这些流程的角色和职责非常有限,在这种情况下,让它们崩溃并重新启动是有意义的

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

  • 错误和例外
  • 错误和过程
  • 谁来监督这些主管