Эликсир-Возможно ли захватить пару ключ-значение? - PullRequest
0 голосов
/ 06 июня 2018

Имея эту функцию:

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 голосов
/ 06 июня 2018

Можно разложить аргумент с помощью Kernel.SpecialForms.with/1:

Enum.map(%{1 => 2, 3 => 4}, &(with {k, v} <- &1, do: k * v))                
#⇒ [2, 12]
0 голосов
/ 06 июня 2018

Да, вы можете создать захват одного аргумента и затем дважды вызвать Kernel.elem/2:

iex(1)> Enum.map(%{1 => 2, 3 => 4}, &(elem(&1, 0) * elem(&1, 1)))
[2, 12]
...