`
acme_ltt
  • 浏览: 53263 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

Erlang程序运行时 出现错误原因

阅读更多

 

Erlang编程指南中,提到了Erlang程序在运行是出现的错误,并简单说明了原因,在此记录下,并简单描述下避免错误发生的措施。以供今后查询之用。

 

1function_clause 

当已存在的函数模式无一匹配该函数时,就是出现该错误。此错误通常发生在两种情况下:1、在分析条件中,遗漏某种匹配模式;2、使用了错误的参数。

  factorial(N) when N > 0 ->

N * factorial(N - 1);

factorial(0) -> 1.

1> test:factorial(-1).

** exception error: no function clause matching test:factorial(-1)

2case_clause

case结构中没有与现有的模式匹配是就会出现该错误。最常见的原因是忘记一种或多种可能出现的情况。

test1(N) ->

case N of

1 -> false;

1 -> true

end.

1> test:test1(0).

** exception error: no case clause matching 0 in function test:test1/1

 

3、if_clause

case_clause相类似。

 

 

上述三种情况,都是因为遗漏或使用错误的参数导致的,避免类似错误情况出现的简单方法有:

1、在函数中,考虑可能出现的其他情况,如在factorial/1中加入

factorial(_Any)  ->

……

这样就可以明显地看出错误出现的地方,及时找到出错位置。

 

 

4、badmatch

Erlang程序中,最常用的就是模式的匹配,badmatch这类出错出现的可能性是较大的。错误出现的情况一般是模式匹配失败,但是对于这类错误,原因是多样的。

A、尝试将值赋给已绑定的变量;

B、匹配某函数的返回值。

 

5badarg

参数调用错误。调用某函数时,参数使用错误会导致该错误的发生。

如:test(helloworld) ->

……

helloword为原子,并非变量,因此会出错。

6undef

当调用某定义或者是未导出的函数时会出现该错误。

当在B module中调用A module中的函数时,应该在A module中将该函数export

 

7、Badarith

当算术运算时使用了不恰当的参数时会出现该错误。

如整数、浮点数视图除以0时。

 

 

 

Erlang 中有自带的程序调试工具,但是,在一般情况下,通过对?DEBUG 或者是 io:format()函数使用,可快速找到出现错误的位置。在程序代码中,可善用之。

分享到:
评论

相关推荐

    Erlang程序设计(第2版)1

    【Erlang程序设计(第2版)】是由Erlang之父Joe Armstrong撰写的一本经典著作,专注于介绍Erlang编程语言在并发、分布式和容错系统中的应用。本书适用于初学者和有一定经验的Erlang程序员。作者在书中讨论了如何利用...

    Erlang程序设计中文版

    **Erlang程序设计中文版**是一本深入探讨Erlang编程语言的书籍,旨在帮助开发者理解和掌握这种在并发处理和分布式系统中广泛使用的语言。Erlang以其强大的错误恢复能力、热代码替换以及对大规模并发的支持而闻名,是...

    erlang程序设计与入门

    BEAM的设计考虑了并发和实时性,确保了Erlang程序的高效运行。 10. **Erlang生态系统** Erlang有丰富的开源库和工具,如 Cowboy(Web服务器)、Rebar3(构建工具)、Ecto(数据库抽象层)等,这些库和工具扩展了...

    Erlang程序设计,包含完整目录和全套源码

    这个压缩包包含了Erlang程序设计的完整目录和源码,是学习和理解Erlang编程的重要资源。 Erlang的并发特性源于其轻量级进程模型,每个进程都有自己的内存空间,进程间通信通过消息传递实现,这种设计降低了并发执行...

    Erlang程序设计及源码

    Erlang采用“let it crash”哲学,即系统中出现问题时,允许错误的进程崩溃,然后由监督树自动重启,这样可以快速恢复服务,保持系统的整体稳定性。这种设计模式使得Erlang系统在面对硬件或软件故障时具有很高的...

    [Erlang程序设计]源代码

    **Erlang程序设计源代码详解** Erlang是一种面向并发、函数式编程语言,尤其在分布式系统和高可用性领域表现出色。本资源包含了《Erlang程序设计》一书的所有实例代码,旨在帮助读者深入理解Erlang语言的核心特性和...

    Erlang程序设计及源代码打包

    **Erlang程序设计概述** Erlang是一种面向并发的、函数式的编程语言,由瑞典电信设备制造商Ericsson开发,主要用于构建高可用性、容错性强的分布式系统。《Erlang程序设计》这本书,作者是Joe Armstrong,他是...

    Erlang 运行环境的安装文件

    此外,Erlang 还具有内置的错误处理机制,使得程序在遇到故障时能够自动恢复,增强了系统的稳定性和可靠性。 安装 Erlang 运行环境通常涉及以下步骤: 1. **下载**:访问 Erlang 官方网站 ...

    Erlang程序设计].源代码

    在"Erlang程序设计"].源代码这个压缩包中,我们可以找到学习和实践Erlang编程的相关材料。这些源代码可能是书中实例的实现,或者是针对Erlang编程技巧和概念的示例。通过阅读和分析这些源代码,你可以深入理解Erlang...

    erlang 程序设计 源码

    在深入理解Erlang程序设计的源码之前,我们需要了解Erlang的一些核心概念和特性。 1. **并发性**:Erlang的并发模型基于轻量级进程(Lightweight Processes,LWP),它们类似于操作系统中的线程,但资源消耗小得多...

    erlang程序设计

    在深入探讨Erlang程序设计之前,我们先来了解一下Erlang的基础概念。 1. 函数式编程:Erlang是一种纯函数式编程语言,这意味着函数不具有副作用,它们仅根据输入产生输出,不改变外部状态。这种特性使得代码更容易...

    编写分布式的Erlang程序:陷阱和对策

    3. **错误处理与恢复**:设计应用程序时应充分考虑错误处理和恢复机制,确保即使在网络故障或其他异常情况下也能维持系统的稳定运行。这可以通过使用Erlang的监督树(supervision tree)等机制来实现。 4. **优化节点...

    Erlang程序设计第2版附书代码

    3. **错误处理和容错**:Erlang采用“失败-不要紧”(Fail-Stop)策略,当一个进程出现错误时,它会停止运行而不影响其他进程,从而实现系统的高可用性。 4. **模式匹配**:Erlang中的模式匹配允许在函数调用中解构...

    Erlang程序设计中文版(完整书签).pdf

    6. Erlang运行时系统(ERTS):ERTS为Erlang程序提供执行环境,包括垃圾回收、线程管理、进程调度等底层服务。它经过优化,可以在多核处理器上有效运行。 7. OTP框架:开放电信平台(Open Telecom Platform)是一个...

    Erlang程序设计_第2版_含中文版英文版_含源码_(Programming_Erlang)_Joe.Armstrong

    当出现问题时,Erlang系统会自动重启失败的进程,而不影响整个系统的稳定运行。这一机制使得Erlang在构建容错系统方面具有天然优势。 此外,Erlang的OTP(Open Telecom Platform)框架是其生态系统的重要组成部分。...

    erlang程序设计第二版课后习题答案(精简版).zip

    《Erlang程序设计第二版》是一本深入探讨Erlang编程语言的书籍,它旨在帮助读者掌握Erlang的核心概念和技术,以实现高并发、容错性和分布式系统的开发。课后习题是学习过程中不可或缺的一部分,它们能够检验并巩固...

    erlang程序设计(第二版)随书源码

    《Erlang程序设计(第二版)》是一本深入探讨Erlang编程技术的书籍,其随书源码提供了丰富的实例,帮助读者更好地理解和实践Erlang编程。 在学习Erlang时,源码是极其宝贵的资源。通过阅读和分析这些代码,我们可以...

Global site tag (gtag.js) - Google Analytics