2016-11-03 17 views
1

私は特定のケースでパターンマッチングを理解するのに苦労しています。私はparamsから値を取得しようとしていますが、これはフェニックスコントローラの構造体だと思います。エリクシールフェニックスのパターン一致 "params"

%{"edit" => "93213e66-a15e-11e6-8bc7-38c986312498", 
    "job_slug" => "7759-tkhkjd-test"} 

iex結果でparamsを入力

ただし、次のコマンドを実行している:

pry(7)> {edit, job_slug} = params 

すると、このエラーがスローされます。

paramsに対して私が正しくパターンマッチを行う方法
** (MatchError) no match of right hand side value: %{"edit" => "93213e66-a15e-11e6-8bc7-38c986312498", "job_slug" => "7759-tkhkjd-test"} 
    (stdlib) :erl_eval.expr/3 

答えて

5

paramsはマップですが、タプルと照合しています。 Elixir Pattern Matching guideから

%{"edit" => edit, "job_slug" => job_slug} = params 

:あなたはこれを試してみてください

The match operator (=) is not only used to match against simple values, but it is also useful for destructuring more complex data types. [...] A pattern match will error in the case the sides can’t match [...] and also when comparing different types.

これはあなたのLHSとRHSは、同じ型でなければなりません、とに変数を割り当てるために正しく一致しなければならないことを意味します左。あなたの場合は、右手側に地図があり、左手にタプルがあり、それはMatchErrorになりました。


関連リンク:

+0

これは、ありがとうございました! – thebringking

0

あなただけの内部ビット、構造体と一致する必要はありません。

%{"edit" =>編集、 "job_slug" => job_slug} = params

+0

この場合は構造体ではありません。それは地図です。違いがあります。 –

関連する問題