Erlang中的非防御性编程
本节第二段中出现以下行:15.1。Erlang简介摘要: 使用负数调用函数将导致运行时错误,因为所有子句都不匹配。不处理这种情况是非防御性编程的一个例子,Erlang鼓励这种做法Erlang中的非防御性编程,erlang,Erlang,本节第二段中出现以下行:15.1。Erlang简介摘要: 使用负数调用函数将导致运行时错误,因为所有子句都不匹配。不处理这种情况是非防御性编程的一个例子,Erlang鼓励这种做法 两个问题:在Erlang中,处理由此产生的错误的惯用方法是什么;为什么这比显式地覆盖所有情况要好,比如在OCaml或Haskell这样的语言中?如果您不为错误情况编写代码,让系统生成运行时错误,您至少可以获得3个优势: 代码更小,更容易阅读,着重于函数的实现 在发生错误的情况下,系统将提出符合OTP标准的错误,您将从
两个问题:在Erlang中,处理由此产生的错误的惯用方法是什么;为什么这比显式地覆盖所有情况要好,比如在OCaml或Haskell这样的语言中?如果您不为错误情况编写代码,让系统生成运行时错误,您至少可以获得3个优势:
- 代码更小,更容易阅读,着重于函数的实现
- 在发生错误的情况下,系统将提出符合OTP标准的错误,您将从所有OTP机制中获益,从而在适当的级别处理这种情况
- 您可以自动避免“千层面”错误检测综合症,即许多代码层跟踪相同的错误情况
try
和catch
语句提供了经典的方法,并通过OTP监督树和链接与监视机制提供了更为惯用的方法
简单地说,您可以控制一个进程崩溃的后果(哪些进程将因此崩溃,哪些进程将得到通知),并有复杂的方法重新启动它们
重要的是要记住,在erlang中,您通常会启动许多小流程,这些流程的角色和职责非常有限,在这种情况下,让它们崩溃并重新启动是有意义的
我是该网站的粉丝,您可以在该网站上找到与错误管理相关的3章:
- 错误和例外
- 错误和过程
- 谁来监督这些主管