2017-03-06 27 views
3

我有一个User模型,has_manyother_model的关系。 我有一个功能Search搜索互联网。我只想在has_many关系不是空数组的情况下搜索互联网。你能模式匹配elixir中的一个非空数组吗?

所以我想知道如果我可以模式匹配一​​个非空数组?正如你在下面看到的,额外的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 
+3

你的意思是像'{:OK,some_results = [_ | _]} < - ...'? – Dogbert

+0

我需要some_associatuons不为空。嗯,我会尝试,当我回家。没有意识到你可以做到这一点...... –

+1

@Dogbert你需要发布一些作为答案:)人们会在评论中想念他们。 :) –

回答

6

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

{: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 
相关问题