the*_*ing 2 elixir pattern-matching phoenix-framework
在我的具体案例中,我很难理解模式匹配; 我试图params在Phoenix控制器中获取值,我认为这是一个结构.
打字params中iex的结果
%{"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?
你params是一张地图但是你正在与一个元组匹配.你应该试试这个:
%{"edit" => edit, "job_slug" => job_slug} = params
Run Code Online (Sandbox Code Playgroud)
匹配运算符(=)不仅用于匹配简单值,还可用于解构更复杂的数据类型.[...]模式匹配将在双方无法匹配的情况下以及在比较不同类型时出错.
这意味着您的LHS和RHS必须属于同一类型,并且必须正确匹配才能在左侧分配变量.在你的情况下,你右手边有一张地图,左手边有一个元组,它抬起一个MatchError.
相关链接: