你能模式匹配elixir中的非空数组吗?

时间:2017-03-06 19:59:22

标签: elixir

我的User模型与has_many的关系other_model。 我有一个搜索互联网的函数Search。我想做的是仅在has_many关系不是空数组的情况下搜索互联网。

所以我想知道我是否可以对非空数组进行模式匹配?正如您在下面所看到的,额外的Search会导致嵌套分支,因此我使用with语句并希望获得一个干净的解决方案。

query = from a in Model, where: a.id == ^id, preload: [:some_associations]

with %{some_associations: some_associations} <- Repo.one(query),
      {:ok, some_results} <- Search.call(keywords, 1) do
            do_something_with(some_associations, some_results)
else
    nil -> IO.puts "query found nothing"
    {:error, reason} -> IO.puts "Search or query returned error with reason #{reason}"
end

1 个答案:

答案 0 :(得分:14)

您可以使用模式[_ | _]来匹配非空列表:

{:ok, some_results = [_ | _]} <- Search.call(keywords, 1)
iex(1)> with xs = [_|_] <- [1, 2, 3] do {:ok, xs} else _ -> :error end
{:ok, [1, 2, 3]}
iex(2)> with xs = [_|_] <- [] do {:ok, xs} else _ -> :error end
:error