首页 > Erlang并发教程 > 8.7 Erlang并发编程-运行时失败
2013
11-15

8.7 Erlang并发编程-运行时失败

运行时失败

如前所述,catch作用域以外的运行时失败将导致进程的异常终止。进程终止时,将向与其链接的所有进程发送EXIT信号。这些信号包括一个指明失败原因的原子式。常见的失败原因如下:

badmatch

匹配失败。例如,尝试匹配1 = 3的进程将终止并向链接进程发送EXIT信号{'EXIT', From, badmatch}

badarg

BIF调用参数错误。例如,执行atom_to_list(123)将导致调用进程终止,并向链接进程发送EXIT信号{'EXIT', From, badarg}。因为123不是原子式。

case_clause

缺少匹配的case语句分支。例如,若进程执行:

M = 3,
case M of
     1 ->
         yes;
     2 ->
         no
end.

则进程将终止,并向所有链接进程发送EXIT信号{'EXIT', From, case_clause}

if_clause

缺少匹配的if语句分支。例如,若进程执行:

M = 3,
if
     M == 1 ->
         yes;
     M == 2 ->
         no
end.

则进程将终止,并向所有链接进程发送EXIT信号{'EXIT', From, if_clause}

function_clause

缺少能够匹配函数调用参数列表的函数首部。例如,对如下的foo/1定义调用foo(3)

foo(1) ->
     yes;
foo(2) ->
     no.

则调用进程终止,并向所有链接进程发送EXIT信号{'EXIT', From, function_clause}

undef

尝试执行未定义函数的进程将终止并向所有链接进程发送{'EXIT', From, undef}(参见第??节)。

badarith

执行非法算术表达式(如,1 + foo)将导致进程终止,并向所有链接进程发送{'EXIT', Pid, badarith}

timeout_value

receive表达式中出现非法超时值;如超时值既不是整数也不是原子式infinity

nocatch

执行了throw语句却没有对应的catch


8.7 Erlang并发编程-运行时失败》有 2 条评论

  1. 我 羡慕嫉妒恨 啊

  2. 我 羡慕嫉妒恨 啊

留下一个回复

你的email不会被公开。