我将函数传递给Enum.reduce
,如下所示,以获取24
Enum.reduce([1,2,3,4], &(&1 * &2)) #=> 24
如果我有一个嵌套列表,我希望将每个嵌套元素相乘并将它们相加。例如在[[1,2],[3,4]]
中,我想执行[[1*2] + [3*4]]
来获取14
,有没有办法(使用匿名函数)
这是我尝试的(知道它不正确),我得到了nested captures via & are not allowed
。我正在尝试了解使用Elixir
Enum.reduce([[1,2],[3,4]], &(&(&1 * &2) + &(&1 * &2)))
答案 0 :(得分:6)
你是完全正确的,如果你试图用捕获来嵌套匿名函数,你会得到(CompileError): nested captures via & are not allowed
。
此外,捕获是为了简单起见。不要过度复杂化。
你可以这样做:
[[1,2],[3,4]]
|> Enum.map(&Enum.reduce(&1, fn(x, acc) -> x * acc end))
|> Enum.sum
我们在这里做的基本上是两件事:
Enum.map(&Enum.reduce(&1, fn(x, acc) -> x * acc end))
对于每个子列表([1, 2]
,[3, 4]
),我们运行捕获的函数&Enum.reduce
,其中&1
是子列表。然后我们计算乘法:fn(x, acc) -> x * acc end
。sum
结果列表。