检查模式是否模式匹配成功或失败

时间:2017-10-24 05:48:20

标签: testing pattern-matching conditional elixir

在Elixir中,是否有一种惯用的方法可以在不使用try/rescue等错误机制的情况下检查匹配是成功还是失败?

2 个答案:

答案 0 :(得分:6)

最好的方法是使用case表达式。

例如。

case Repo.insert(changeset) do
  {:ok, user} -> happy_path
  {:error, changeset} - sad_path
end

此外,如果您想100%确定您匹配所有可能的方案,您可以在最底部添加与其他所有内容匹配的方案:

unknown_case -> Logger.debug(inspect unknown_case)

答案 1 :(得分:6)

虽然@PatNowak的答案绝对正确,但我个人更喜欢使用带有不同子句的私有函数处理程序来使代码更加结构化:

插入:

changeset
|> Repo.insert()
|> handle_insert()

处理程序:

defp handle_insert({:ok, user}), do: happy_path
defp handle_insert({:error, changeset}), do: sad_path
defp handle_insert(whatever), do: Logger.debug()