有这个功能:
Enum.map(%{1 => 2, 3 => 4}, fn {k, v} -> k * v end)
是否可以捕获匿名函数?我试着做这样的事情:
Enum.map(%{1 => 2, 3 => 4}, &*/2)
或者像这样:
Enum.map(%{1 => 2, 3 => 4}, &(&1 * &2))
两种方式都失败了,因为捕获的函数有arity / 2而map只传递了1个参数,即该对。
有可能吗?这不是我真正想做的事情,但我很好奇。
答案 0 :(得分:3)
有人可能会使用Kernel.SpecialForms.with/1
分解参数:
Enum.map(%{1 => 2, 3 => 4}, &(with {k, v} <- &1, do: k * v))
#⇒ [2, 12]
答案 1 :(得分:1)
是的,你可以创建一个参数的捕获,然后两次调用Kernel.elem/2
:
iex(1)> Enum.map(%{1 => 2, 3 => 4}, &(elem(&1, 0) * elem(&1, 1)))
[2, 12]