我发现自己经常写这样的图案,我觉得这不太理想:
Enum.filter(my_list, fn e ->
case e do
{:ok, x} -> true
{:error, y} -> false
end
end)
|> Enum.map(fn e -> {:ok, something} = e; something end)
my_list由某个返回{:ok,x}或{:error,y}的函数创建的地方
当我想忽略错误时,我会这样做。
对我有任何其他选择吗?
答案 0 :(得分:9)
为此,您应该使用for
模式{:ok, term}
。 for
会自动忽略枚举中与模式不匹配的所有值,这有助于实现这一优雅解决方案:
iex(1)> my_list = [{:ok, 1}, {:error, 2}, {:ok, 3}, {:ok, 4}, {:error, 5}]
[ok: 1, error: 2, ok: 3, ok: 4, error: 5]
iex(2)> for {:ok, term} <- my_list, do: term
[1, 3, 4]