我正在创建一个案例声明,并达到一个案例,我认为进行模式匹配比较可能是不错的/适用的。我似乎在网上找不到任何东西。以下面的假设示例为例:
person = %Person{first_name: "Test", last_name: "example}
person2 = %Person{first_name: "another", last_name: "person"}
case list do
[] ->
:empty
[person, person2] == [%Person{} | _] ->
:true
[_] ->
:no_Person_struct
end
当然,这只会检查列表的开头,但是有什么类似的方法或方法吗?
如果可能的话,也可以否定它。即
[person, person2] == [%NotAPerson{} | _] == false -> :true
语法很可能是错误的。
编辑:至少参数中的模式匹配如何?
def([%Person{} | _] = people) do
答案 0 :(得分:1)
您使事情复杂化了。
case list do
[] -> :empty
[%Person{} = _person | _] -> :first_is_a_person
[_ | _] -> :first_is_not_a_person # because the previous clause did not match
end
要检查列表中的所有元素,请使用Enum.all?/2
:
Enum.all?(list, fn
%Person{} -> true
_ -> false
end)