我可以在Elixir中嵌套匿名函数吗?

Bal*_*ala 5 elixir

我正在传递一个函数,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)

sob*_*evn 7

你是完全正确的,如果你试图用你将获得的捕获来嵌套匿名函数(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)

我们在这里做的基本上是两件事:

  1. Enum.map(&Enum.reduce(&1, fn(x, acc) -> x * acc end)) 对于每个子列表([1, 2],[3, 4]),我们运行捕获的函数&Enum.reduce,其中&1是子列表.然后我们计算乘法:fn(x, acc) -> x * acc end.
  2. 我们sum的结果列表.