我正在尝试从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)
他们在管道输送时无法工作。
我确信我遗漏了一些明显的东西。
答案 0 :(得分:11)
编辑在Elixir的主分支上,如果存在参数,编译器将在没有括号的情况下发出警告。
您需要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?以获取更详细的说明。