Elixir。具有多种地图匹配选项的模式匹配

问题描述 投票:0回答:1

在Elixir中,我没有写这样的东西,而是把它简化成:

case getUser(id) do
  %User{status: "pending"} -> something()
  %User{status: "available"} -> something()
  _ -> something_else()
end

我把它简化成:

case getUser(id) do
  %User{status: "pending" | "available"} -> something()
  _ -> something_else()
end

但是出现了错误

cannot find or invoke local |/2 inside match. Only macros can be invoked in a match and they must be defined before their invocation. Called as: "pending" | "available"

有没有更好的方法?我不想把同一个函数写两次。

elixir phoenix-framework elixir-framework
1个回答
3
投票
case getUser(id) do
  %User{status: status} when status in ["pending", "available"] -> something()
  _ -> something_else()
end

when .. in 是一个 守卫 并在上简要提及 情况,条件,如果 页。

© www.soinside.com 2019 - 2024. All rights reserved.