检查参数是否已发送到函数

时间:2016-10-05 14:44:14

标签: erlang

我有以下情况,请求发送到我的服务器,我正在解析一些GET参数,以便正确处理它。解析请求后,我得到的结果如下:

some_function(parameter1, parameter2, ...) ->
    some_steps_here.

我的想法是,如果缺少某些参数,我希望能够返回好的错误代码。例如。如果用户没有在其网址中输入parameter1,我想返回错误而不是some_steps_here

尝试使用模式匹配来解决它,但根本不知道如何去做。

1 个答案:

答案 0 :(得分:3)

首先,如果您将param1param2写为低位字母,则表示atom而不是参数。你希望你的功能是:

some_function(Param1, Param2, ...)

关于您的问题,我建议使用功能条款来捕捉Param1 == undefined例如

的情况
some_function(undefined, _Param2, ...) ->
    io:format("Param1 is undefined~n");
some_function(_Param1, undefined, ...) ->
    io:format("Param2 is undefined~n");
some_function(Param1, Param2, ...) ->
    io:format("Params are OK!~n").

每个子句用;分隔,最后一个子句用点.结束。

更新:

回答以下评论:有没有办法让它更通用?

这实际上取决于您的实施。你需要考虑你想要的输入是什么,如果你没有得到所需的输入,你会得到什么?一个特定的原子?只是一个随机原子而不是列表?下面我添加了一些您可能也会使用的其他选项。请看一下Learn You Some Erlang,你可能会在那里找到你所有的答案。

您可以使用警卫来检查特定类型:

some_function(Param1, ...) when is_atom(Param1) -> 
    ...
some_function(Param1, ...) -> ...

或者,case .. of检查具体内容:

some_function(Param1, Param2, ...) ->
    case Param1=:=7 andalso is_list(Param2) of
        true  -> something;
        false -> something_else
    end.

有关详细信息和示例,请参阅thisthis