Elixir Phoenix模式匹配" params"

时间:2016-11-03 02:34:13

标签: pattern-matching elixir phoenix-framework

我在特定情况下努力理解模式匹配;我试图从凤凰控制器中获取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

2 个答案:

答案 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