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

时间:2016-07-06 06:22:12

标签: elixir

我将函数传递给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)))

1 个答案:

答案 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

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

  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结果列表。