Как я могу передать список в качестве аргумента для элемента функции за элементом в Elixir? - PullRequest
1 голос
/ 19 марта 2020

У меня есть функция (lex_raw_tokens), которая получает 2 аргумента. Другая функция имеет 2 списка элементов, которые мне нужно передать в качестве аргументов другой функции, но элемент за элементом.

В исходном коде функция получила только 1 аргумент, и я вызвал его, используя Enum.flat_map(sal, &lex_raw_tokens/1), где sal - список, который я передаю. Это сработало, но позже мне пришлось изменить lex_raw_tokens, чтобы получить 2 аргумента вместо 1.

Я попытался решить проблему с помощью Enum.flat_map(sal, &lex_raw_tokens(&1, line)), и, хотя это технически работает, строка передается как весь список, а не как отдельный элементы.

Я все еще новичок в Elixir, и я не нашел другой функции для замены flat_map, которая делает то, что я хочу, и я не нашел способа использовать flat_map таким образом.

Я должен также упомянуть, что списки, которые я передаю, имеют переменную длину, поэтому я не могу грубо обойти эту проблему. Кроме того, оба списка имеют одинаковую длину и отношение, поэтому мне нужно будет использовать первый элемент sal с первым элементом line, второй со вторым и т. Д.

1 Ответ

1 голос
/ 19 марта 2020

Enum.zip/2 ваш друг здесь.

sal = ~w|one two three|
line = ~w|apple orange lemon|

sal
|> Enum.zip(line)
|> Enum.flat_map(&lex_raw_tokens(elem(&1, 0), elem(&1, 1)))
...