exit(Why) 广播一个信号给当前进程链接的所有进程。
throw(Why) 抛出一个调用者可能想要捕捉的异常错误。
error(Why) 指示奔溃性错误,非常严重的错误。
捕捉错误,try...catch
try FuncOrExpressionSeq of
Pattern1[when Guard1] -> Expressions1;
Pattern2[when Guard2] -> Expressions2;
...
catch
ExceptionType1: ExPattern1 [when ExGuard1] -> ExExpressions1;
ExExpressions2: ExPattern2 [when ExGuard2] -> ExExpressions2;
...
after
AfterExpressions
end
提供了概括的信息
catch 语句,比try...catch更加早引入Erlang。
提供了详细的栈跟踪信息。
经常出现错误的时候的代码:
case f(x) of
{ok, Val} ->
do_some_thing_with(Val);
{error, Why} ->
%% ... 处理这个错误...
end,
...
try my_func(X)
catch
throw:{thisError, X} -> ...
throw:{someOtherError, X} -> ...
end
try Expr
catch
_:_ -> ... 处理所有异常错误的代码
end
erlang:get_stacktrace()获得最近的栈跟踪信息。
有错误,就要尽量往外面抛,展现出来。让程序彻底奔溃。这是Erlang 的原则。
或许吧。
但是不是做游戏的原则。
至少不是做游戏服务端的原则。
我们可以容忍错误的存在。因为我们是快速开发。bug是修不完的。
只能建一个修一个。