【问题标题】:Non-defensive programming in ErlangErlang 中的非防御性编程
【发布时间】:2015-12-25 05:49:30
【问题描述】:

以下行出现在http://aosabook.org/en/riak.html 中,在该部分的第二段中:15.1。 Erlang 简介

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

两个问题:在Erlang中处理产生的错误的惯用方式是什么;为什么这比像 OCaml 或 Haskell 等语言那样明确地覆盖所有情况要好?

【问题讨论】:

    标签: erlang


    【解决方案1】:

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

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

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

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

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

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

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

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

    • 错误和异常
    • 错误和过程
    • 谁监督监事?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多