我在特定情况下努力理解模式匹配;我试图从凤凰控制器中获取use std::io::Write;
fn main() {
std::io::stdout().flush().expect("some error message");
}
的值,我认为这是一个结构。
在params
中输入params
会导致
iex
但是,运行以下命令:
%{"edit" => "93213e66-a15e-11e6-8bc7-38c986312498",
"job_slug" => "7759-tkhkjd-test"}
抛出此错误:
pry(7)> {edit, job_slug} = 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
?
答案 0 :(得分:7)
您的params
是一张地图,但您将其与元组进行匹配。你应该试试这个:
%{"edit" => edit, "job_slug" => job_slug} = params
来自Elixir Pattern Matching guide:
匹配运算符(=)不仅用于匹配简单值,还可用于解构更复杂的数据类型。 [...]模式匹配将在双方无法匹配的情况下以及在比较不同类型时出错。
这意味着您的LHS和RHS必须属于同一类型,并且必须正确匹配才能在左侧分配变量。在你的情况下,你的右手边有一张地图,左手边有一个元组,它抬起MatchError
。
相关链接:
答案 1 :(得分:0)
您需要匹配结构,而不仅仅是内部位:
%{“edit”=>编辑,“job_slug”=> job_slug} = params