2017-02-25 39 views
1

我發現自己寫的模式是這樣的美麗常常,我覺得這是不理想:更清潔的方式來遍歷元組靈藥

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

的硬善待告訴你沒有一個完整的工作代碼示例在做什麼。 – Dmitry

回答

6

對此,您應該使用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]