【问题标题】:Using pipe with filter and map in elixir在长生不老药中使用带有过滤器和地图的管道
【发布时间】:2015-11-16 20:58:11
【问题描述】:

我正在尝试从 Elixir 的地图中过滤掉一些值。

这个:

params = %{"blah" => "blah", "vtha" => "blah"}
params 
  |>  Enum.filter fn {k, v} -> k == v end 
  |>  Enum.map(fn {k, v} -> {k, v} end)

导致此错误: ** (FunctionClauseError) Enumerable.Function.reduce/3 中没有函数子句匹配

但是过滤器和映射操作都是独立工作的。

Enum.filter params, fn {k, v} -> k == v end 
Enum.map(params, fn {k, v} -> {k, v} end)

它们在管道时不起作用。

我确定我遗漏了一些明显的东西。

【问题讨论】:

    标签: functional-programming elixir


    【解决方案1】:

    EDIT 在 Elixir 的 master 分支上,如果有参数,编译器会警告如果一个函数被不带括号的管道输入。


    Enum.filter 需要显式括号,因为函数调用的优先级高于管道运算符。

    params = %{"blah" => "blah", "vtha" => "blah"}
    params 
      |>  Enum.filter(fn {k, v} -> k == v end)
      |>  Enum.map(fn {k, v} -> {k, v} end)
    

    请参阅Why Can't I Chain String.replace?了解更详细的说明。

    【讨论】:

    • 谢谢!我知道这将是显而易见的。 :)
    猜你喜欢
    • 1970-01-01
    • 2016-02-01
    • 1970-01-01
    • 2021-01-29
    • 2016-12-31
    • 1970-01-01
    • 1970-01-01
    • 2017-12-29
    • 1970-01-01
    相关资源
    最近更新 更多