"或" Elixir中的条件模式匹配

时间:2016-12-15 04:20:15

标签: elixir

如果可以,我该如何处理与"或"的模式匹配?条件?我需要这个,因为我有一些不同的条件,哪个行动是一样的?

case something123 do
  :a -> func1()
  :b -> func1()
  :c -> func1()
  :d -> func2()
end

3 个答案:

答案 0 :(得分:12)

您可以使用in并列出:

case something123 do
  x when x in [:a, :b, :c] -> func1()
  :d -> func2()
end
x in [:a, :b, :c]宏检测到从保护语句调用它并且RHS是文字列表(因为您无法从警卫调用远程函数)时,

x == :a or x == :b or x == :c会扩展为in

答案 1 :(得分:4)

您可以使用多个功能头,然后使用多个功能。

的内容
def foo(%{"key" => "value"}), do: do_something()
def foo(%{"other_key" => "other_value"}), do: do_something()
def foo(map), do: do_something_else(map)

defp do_something() do
  ...
end

defp do_something_else(map) do
  ...
end

这样您就可以匹配所需的数据,并采取相应的行动。

答案 2 :(得分:4)

您也可以使用cond来执行此操作。

cond do
  something123 == :a or something123 == :b something123 == :c ->
    func1()
  something123 == :d ->
    func2()
end