有没有办法将变量设置为nil,在模式匹配,Elixir中不匹配

时间:2018-04-13 08:03:52

标签: elixir phoenix-framework

我写了一个我想在两个或更多控制器中使用的插件。

对于第一个控制器,params %{params: %{“param1” => param01, “param2” => param02}} = conn中有两个变量,而第二个控制器只有一个变量%{params: %{“param1” => param01} = conn

我在插件中使用%{params: %{“param1” => param01, “param2” => param02}} = conn进行模式匹配。当请求到达第二个控制器时,它会抛出(MatchError) no match of right hand side value:

我想要一个模式匹配,可以优雅地处理这两个案例。有没有办法为{strong>第二个控制器设置param02nil,而不是出错。

提前感谢您的回答。我刚开始学习Elixir / Phoenix Framework并且还是新手。

1 个答案:

答案 0 :(得分:2)

你无法通过模式匹配来做到这一点。您可以改为提取params并在代码中指定param2

def foo(%{params: %{“param1” => param01} = params} = conn) do
  param02 = params["param2"]
  ...
end

param02现在将设置为conn.params [“param2”](如果存在),否则设置为nil