我的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
答案 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