如果可以,我该如何处理与"或"的模式匹配?条件?我需要这个,因为我有一些不同的条件,哪个行动是一样的?
case something123 do
:a -> func1()
:b -> func1()
:c -> func1()
:d -> func2()
end
答案 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