我正在传递一个函数,Enum.reduce如下所示24
Enum.reduce([1,2,3,4], &(&1 * &2)) #=> 24
Run Code Online (Sandbox Code Playgroud)
如果我有一个嵌套列表,我希望将每个嵌套元素相乘并将它们加在一起.例如,[[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)))
Run Code Online (Sandbox Code Playgroud)
    你是完全正确的,如果你试图用你将获得的捕获来嵌套匿名函数(CompileError): nested captures via & are not allowed.
此外,捕获是为了简单起见.不要过度复杂化.
这就是你如何做到的:
[[1,2],[3,4]]
|> Enum.map(&Enum.reduce(&1, fn(x, acc) -> x * acc end)) 
|> Enum.sum
Run Code Online (Sandbox Code Playgroud)
我们在这里做的基本上是两件事:
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的结果列表.|   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           1330 次  |  
        
|   最近记录:  |