运行时失败
运行时失败
如前所述,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 -> noend.
>
> 则进程将终止,并向所有链接进程发送`EXIT`信号`{'EXIT', From, case_clause}`。
`if_clause`
> 缺少匹配的`if`语句分支。例如,若进程执行:
>
> ```
M = 3,if M == 1 -> yes; M == 2 -> noend.
则进程将终止,并向所有链接进程发送
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。
