【问题标题】:Cleaner way to iterate over tuples in elixir更清洁的方法来迭代 elixir 中的元组
【发布时间】:2017-02-26 03:49:03
【问题描述】:

我发现自己经常写这样的模式,我觉得它并不理想:

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} 的函数创建的

当我想忽略错误时,我会这样做。

我有其他选择吗?

【问题讨论】:

  • 如果没有完整的工作代码示例,很难判断您在做什么。

标签: elixir


【解决方案1】:

为此,您应该使用 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]

【讨论】:

    猜你喜欢
    • 2020-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-03
    • 2020-05-10
    • 2020-12-23
    • 1970-01-01
    相关资源
    最近更新 更多