我发现自己经常写这样的图案,我觉得它不理想:
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)
Run Code Online (Sandbox Code Playgroud)
my_list由某个返回{:ok,x}或{:error,y}的函数创建的地方
当我想忽略错误时,我这样做.
有什么替代方案吗?
Dog*_*ert 10
你应该使用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]
Run Code Online (Sandbox Code Playgroud)