2016-10-05 6 views
0

次のようなケースがあります。私のサーバーにリクエストが送信され、いくつかのGETパラメータが解析されています。アイデアは、私は、これらのパラメータの一部が欠落している場合には素敵なエラーコードを返すことができるようにしたいということですパラメータが関数に送信されたかどうかを確認します。

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

:要求が解析された後、私のようなものを取得しています。例えば。ユーザーが彼のURLにparameter1を入力しなかった場合は、some_steps_hereの代わりにエラーを返したいと思います。

パターンマッチングを使って解決しようとしていましたが、どうやってそれを行うのか考えていませんでした。

+0

ユーザが「自分のurlにparameter1を入力しなかった」場合、正確にどのような値を 'parameter1'として渡しますか?空の文字列ですか?空のバイナリ?なし?何か? – Dogbert

+0

私は 'undefined'として解析しました。 (param1 == undefined - > )'' 'some_function(param1、 send({502、Msg}、Req); some_function(param1、param2) - > main_handler_here''' –

答えて

3

最初に、param1param2を下位文字として書くと、​​を意味し、パラメータではありません。私は、例えば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"). 

すべての句が;によって分離されている場合をキャッチする機能句を使用することをお勧めしたい、あなたの質問に関しては

some_function(Param1, Param2, ...) 

:あなたはあなたの関数になりたいです最後の句はドット.で終了します。

更新:

答える以下のコメント:は、より汎用的にする方法はありますか?

本当に実装によって異なります。あなたはあなたの望みの入力が何であるか考える必要があり、あなたが望みの入力を得なければ、何を得るでしょうか?特定の原子ですか?リストの代わりにちょうどランダムな原子ですか?以下では、使用する可能性のある他のオプションをいくつか追加しました。そして、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を参照してください。

+0

これをより一般的にする方法はありますか?例えば。私は4つの同じ機能を書いたくありません。特に彼らがほぼ同じ結果を返すことを考慮に入れてください。 –

+0

@OlegTarasenko私の編集をご覧ください。また、私が私の答えで言及したリンクを見てください。 –

関連する問題