检查模式模式匹配是否成功或失败
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()
在 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()