Elixir - 是否可以捕获键值对?

时间:2018-06-06 13:32:13

标签: elixir

有这个功能:

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个参数,即该对。

有可能吗?这不是我真正想做的事情,但我很好奇。

2 个答案:

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