erlang phylosophy:我应该让用户处理错误的输入吗?

时间:2011-11-07 22:56:26

标签: erlang

情况就是这样:

% print/1: Prints out the integers between 1 and N
print(0) ->   io:format("~w~n", [0]);
print(N) when is_integer(N) -> 
          io:format("~w~n", [N]),
          print(N - 1).

如果用户输入非整数,则会发生这种情况:

11> effects:print('alfalfa').
** exception error: no function clause matching effects:print(alfalfa)

关于哲学:我应该以这种方式纠正我的程序,以便“捕获所有”的输入吗?

% print/1: Prints out the integers between 1 and N
print(0) ->   io:format("~w~n", [0]);
print(N) when is_integer(N) -> 
          io:format("~w~n", [N]),
          print(N - 1).
% Last Line added:
print(_Other) -> false.

我是erlang的新手。是否有一些处理这个问题的惯例?

谢谢!

2 个答案:

答案 0 :(得分:7)

在Erlang中,你几乎不会遇到如此糟糕的API用法。如果没有模式与调用匹配,则会抛出具有相当详细消息的exception of class exit{function_clause, CallStack})。 几乎所有标准库方法都会抛出。目前我没有想到反例。

顺便说一句:如果出现某种错误(主要不是使用错误),你大多会返回{error, Msg},而不是假。在好的情况下,会返回ok{ok, Datum}

答案 1 :(得分:2)