Elixir Phoenix模式匹配"params"

the*_*ing 2 elixir pattern-matching phoenix-framework

在我的具体案例中,我很难理解模式匹配; 我试图params在Phoenix控制器中获取值,我认为这是一个结构.

打字paramsiex的结果

%{"edit" => "93213e66-a15e-11e6-8bc7-38c986312498",
  "job_slug" => "7759-tkhkjd-test"}
Run Code Online (Sandbox Code Playgroud)

但是,运行以下命令:

pry(7)> {edit, job_slug} = params
Run Code Online (Sandbox Code Playgroud)

抛出此错误:

** (MatchError) no match of right hand side value: %{"edit" => "93213e66-a15e-11e6-8bc7-38c986312498", "job_slug" => "7759-tkhkjd-test"}
     (stdlib) :erl_eval.expr/3
Run Code Online (Sandbox Code Playgroud)

如何正确模式匹配params

She*_*yar 7

params是一张地图但是你正在与一个元组匹配.你应该试试这个:

%{"edit" => edit, "job_slug" => job_slug} = params
Run Code Online (Sandbox Code Playgroud)

来自Elixir Pattern Matching指南:

匹配运算符(=)不仅用于匹配简单值,还可用于解构更复杂的数据类型.[...]模式匹配将在双方无法匹配的情况下以及在比较不同类型时出错.

这意味着您的LHS和RHS必须属于同一类型,并且必须正确匹配才能在左侧分配变量.在你的情况下,你右手边有一张地图,左手边有一个元组,它抬起一个MatchError.


相关链接: