Как передать результаты Enum.join в Regex.scan в Эликсире?

Из документов по оператору канала я вижу: «Символ |>, используемый в приведенном выше фрагменте, является оператором канала: он просто берет вывод из выражения слева и передает его в качестве первого аргумента вызову функции справа. сторона.".

Но если у меня есть строка, которую я разделяю, затем соединяю ее и хочу передать эту объединенную строку в Regex.scan ниже, как мне это сделать? Я получаю скомпилированную ошибку необработанный &1 вне захвата, когда пытаюсь запустить приведенное ниже... И я думаю, что это связано с тем, что я не понимаю, как захватывать вывод оператора конвейера и использовать его. как аргумент.

string
|> String.split(" ")  
## some other operations here to operate on split string omitted for clarity
|> Enum.join
|> Regex.scan(~r/[A-Z]/, &1)
|> List.flatten
|> Enum.join

person Nona    schedule 04.06.2016    source источник


Ответы (1)


Вы можете создать анонимную функцию с помощью & и подключить к ней:

"Hello World!"
|> String.split(" ")
|> Enum.join
|> (&Regex.scan(~r/[A-Z]/, &1)).()
|> List.flatten
|> Enum.join
|> IO.inspect

Выход:

"HW"
person Dogbert    schedule 04.06.2016