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

Check pattern whether pattern match has succeeded or failed

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

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

例如。

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

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

unknown_case -> Logger.debug(inspect unknown_case)

虽然@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()