在Erlang编程指南中,提到了Erlang程序在运行是出现的错误,并简单说明了原因,在此记录下,并简单描述下避免错误发生的措施。以供今后查询之用。
1、function_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)
2、case_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、匹配某函数的返回值。
5、badarg
参数调用错误。调用某函数时,参数使用错误会导致该错误的发生。
如:test(helloworld) ->
……
helloword为原子,并非变量,因此会出错。
6、undef
当调用某定义或者是未导出的函数时会出现该错误。
当在B module中调用A module中的函数时,应该在A module中将该函数export。
7、Badarith
当算术运算时使用了不恰当的参数时会出现该错误。
如整数、浮点数视图除以0时。
在Erlang 中有自带的程序调试工具,但是,在一般情况下,通过对?DEBUG 或者是 io:format()函数使用,可快速找到出现错误的位置。在程序代码中,可善用之。
分享到:
相关推荐
【Erlang程序设计(第2版)】是由Erlang之父Joe Armstrong撰写的一本经典著作,专注于介绍Erlang编程语言在并发、分布式和容错系统中的应用。本书适用于初学者和有一定经验的Erlang程序员。作者在书中讨论了如何利用...
此外,Erlang 还具有内置的错误处理机制,使得程序在遇到故障时能够自动恢复,增强了系统的稳定性和可靠性。 安装 Erlang 运行环境通常涉及以下步骤: 1. **下载**:访问 Erlang 官方网站 ...
在深入理解Erlang程序设计的源码之前,我们需要了解Erlang的一些核心概念和特性。 1. **并发性**:Erlang的并发模型基于轻量级进程(Lightweight Processes,LWP),它们类似于操作系统中的线程,但资源消耗小得多...
3. **错误处理与恢复**:设计应用程序时应充分考虑错误处理和恢复机制,确保即使在网络故障或其他异常情况下也能维持系统的稳定运行。这可以通过使用Erlang的监督树(supervision tree)等机制来实现。 4. **优化节点...
2. **热代码升级**:Erlang支持在运行时更新代码,无需停机,这对持续运行的游戏服务来说非常关键,可以保证用户体验的连续性。 3. **容错性**:Erlang的进程隔离和故障隔离机制使得单个组件的故障不会影响整个系统...
- **BEAM虚拟机**:Erlang程序在BEAM虚拟机上运行,它是Erlang运行时系统的核心部分。 - **模块和函数**:Erlang程序由模块组成,模块中包含若干个函数。 - **Pattern Matching**:Erlang中的模式匹配是函数定义的...
Erlang是一种动态类型语言,类型检查在运行时进行,这意味着你不需要在代码中声明变量的数据类型。不过,理解Erlang的类型系统对于编写高效且可维护的代码至关重要。 递归在Erlang程序设计中占有重要地位,因为...
- 测试安装是否成功,可以通过编写简单的Erlang程序并在命令行中运行来验证。 ##### 3. 测试安装 创建一个简单的Erlang模块`tut.erl`,包含基本的打印功能。通过编译和运行该模块来检查Erlang是否正确安装和配置。 ...
Erlang采用“let it crash”哲学,鼓励程序在遇到错误时立即崩溃,而不是尝试恢复。这样可以快速暴露问题,便于系统自我修复。Supervision树(Supervisor Trees)是处理故障的一种机制,它能自动重启失败的进程。 #...
"xiandiao_erlang_Erlang课后习题_"这个压缩包文件包含了Erlang程序设计第二版的课后习题源码,这对于学习和深入理解Erlang编程至关重要。 Erlang的特点: 1. **函数式编程**:Erlang基于函数式编程范式,强调无副...
错误的编程实践会导致程序运行不稳定,甚至出现无法预料的错误。 所需文档约定部分强调了清晰的文档对于维护和理解大型Erlang程序的重要性。文档不仅包括对程序功能的描述,还应当包含对程序设计思想的解释和对潜在...
- **BEAM虚拟机**:Erlang的运行时系统,全称是BIFs (Built-In Functions)、Erlang、Assembler and Memory管理器。 - **OTP行为**:如Supervisor(监督者)、GenServer(通用服务器)、GenEvent(事件处理器)等,...
Erlang是一种面向并发的、函数式编程语言,由瑞典电信设备制造商Ericsson于1986年开发,主要用于构建高可用性...《Erlang程序设计》这本书,无论是中文版还是英文版,都为学习者提供了深入了解和掌握Erlang的宝贵资源。
安装这个文件将为你的系统提供运行Erlang程序所需的环境。 "24.2.txt"可能包含Erlang 24.2版本的发布说明、更新日志或安装指南。这些信息对于了解新版本带来的改进、修复的错误和可能的兼容性问题至关重要。例如,...
ESL是一家致力于Erlang生态系统发展的公司,他们发布的版本通常包含了完整的Erlang/OTP(开放电信平台)系统,包括编译器、运行时环境和其他实用工具。 安装Erlang的步骤如下: 1. 下载:首先,你需要从Erlang ...
BEAM是Erlang虚拟机的缩写,它是Erlang程序运行的基础。BEAM虚拟机执行Erlang字节码,提供了垃圾回收、内存管理等功能。在源码中,你可以找到关于字节码解释器、垃圾收集算法的实现。 3. **模块和函数** Erlang...
首先,它提升了Erlang虚拟机(VM)的性能,包括更快的代码加载和垃圾回收机制,这使得应用程序能够更高效地运行。其次,该版本增强了错误处理和调试工具,比如增加了一些新的日志选项,使开发者在遇到问题时能够更快...
2. **故障恢复**:Erlang的进程独立性和热代码替换功能使得系统在出现错误时可以优雅地失败,并且能够在运行时更新代码,无需重启服务。 3. **分布式**:Erlang天生支持分布式计算,节点间的通信如同本地进程一样...
Erlang环境,如"opt_win64_21.1"版本,提供了在Windows平台上运行Erlang程序所需的基础组件。 OTP(Open Telephony Platform)是Erlang的开源开发框架,包含了Erlang虚拟机(BEAM)、库函数、编程模式和设计原则。...
《Erlang程序设计》这本书可能是介绍Erlang基础概念和技术的一本入门书籍,涵盖了变量、数据类型、模式匹配、函数、进程、消息传递等核心概念。书中可能会深入讨论如何在Erlang中编写高效的并发程序,以及其独特的...