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

在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()函数使用,可快速找到出现错误的位置。在程序代码中,可善用之。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值