Erlang程序运行时 出现错误原因
来源:互联网 发布:mac flac音乐转换器 编辑:程序博客网 时间:2024/05/15 03:02
在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程序运行时 出现错误原因
- Erlang运行时错误
- C语言中运行程序时出现错误的几种原因
- linux下运行程序后出现段错误的原因和解决案例
- linux下运行程序后出现段错误的原因和解决案例
- Linux下运行C++程序出现“段错误(核心已转储)”的原因
- 运行Erlang的程序
- 下面的程序运行时哪里会出现错误
- 运行程序时出现 "Error establishing socket" 错误
- 二叉树程序的问题是运行时出现错误
- Android程序运行时出现java.lang.OutOfMemoryError 错误
- vc6.0运行时出现非程序错误
- 运行hdfs的wordcount程序时出现的错误
- [原]NDK程序在虚拟机上运行出现signal 4 (SIGILL), fault addr 错误的原因及解决方法
- 运行ASP.NET 出现程序错误
- qt程序运行,有时候出现内存错误
- IE使用innerHTML出现未知的运行时错误的原因
- STL对象出现运行时错误Core的几个可能原因
- CMSDJPHP 七禧舞曲管理系统cookies欺骗漏洞 0day
- mac 下 Git 使用
- c++中 strlen
- 关于erlang的进程池
- Git常用操作命令
- Erlang程序运行时 出现错误原因
- hdu2544最短路-裸的flody-dijkstra-spfa
- NFS服务器详解
- Winform获取本地IP和外网IP
- android linux 解压命令
- 使用 MARQUEE HTML中实现图片的各种滚动效果
- error: conflicting types
- JAVA中的向上转型与向下转型
- NSProxy实现AOP方便为ios应用实现异常处理策略