"blah", "vtha" => "blah"} params |> Enum.filt-6ren">
gpt4 book ai didi

functional-programming - 在 elixir 中使用带有过滤器和映射的管道

转载 作者:行者123 更新时间:2023-12-04 00:18:04 24 4
gpt4 key购买 nike

我试图从 Elixir 的 map 中过滤掉一些值。

这个:

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)

管道输送时它们不起作用。

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

最佳答案

编辑 在 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?以获得更详细的解释。

关于functional-programming - 在 elixir 中使用带有过滤器和映射的管道,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33608568/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com