首页 > Erlang并发教程 > 8.2 Erlang并发编程-使用catch和throw抵御不良代码
2013
11-15

8.2 Erlang并发编程-使用catch和throw抵御不良代码

BACK TOP文章索引

  1. 使用catch和throw抵御不良代码
  2. 共2条评论

使用catch和throw抵御不良代码

下面来看一个简单的Erlang shell脚本:

-module(s_shell).
-export([go/0]).

go() ->
    eval(io:parse_exprs('=> ')),    % '=>' is the prompt
    go().

eval({form,Exprs}) ->
    case catch eval:exprs(Exprs, []) of % Note the catch
        {'EXIT', What} ->
            io:format("Error: ~w!~n", [What]);
        {value, What, _} ->
            io:format("Result: ~w~n", [What])
    end;
eval(_) ->
    io:format("Syntax Error!~n", []).

标准库函数io:parse_exprs/1读取并解析一个Erlang表达式,若表达式合法,则返回{form,Exprs}

正确情况下,应该匹配到第一个子句eval({form,Expr})并调用库函数eval:exprs/2对表达式进行求值。由于无法得知表达式的求值过程是否为失败,我们在此使用catch进行保护。例如,对1 - a进行求值将导致错误,但在catch内对1 - a求值就可以捕捉这个错误[2]。借助catch,在求值失败时,case子句与模式{'EXIT',what}匹配,在求值成功时则会与{value, What, _}匹配。


8.2 Erlang并发编程-使用catch和throw抵御不良代码》有 2 条评论

  1. 作者怎么了,好久没更了

  2. 作者怎么了,好久没更了

留下一个回复

你的email不会被公开。