【问题标题】:Can I nest anonymous functions in Elixir?我可以在 Elixir 中嵌套匿名函数吗?
【发布时间】:2023-03-25 12:46:02
【问题描述】:

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

【问题讨论】:

  • 最好不要使用& 操作符来创建过于复杂的匿名函数,因为你最终会得到难以调试和理解的代码。

标签: elixir


【解决方案1】:

您完全正确,如果您尝试使用捕获嵌套匿名函数,您将得到(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结果列表。

【讨论】:

  • 您好,能否请您简要描述一下您的解决方案以澄清我的理解。谢谢。
猜你喜欢
  • 2014-02-27
  • 2020-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-30
  • 2014-06-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多