Использование оператора канала с функциями, но без аргументов - PullRequest
0 голосов
/ 18 января 2019

Эликсир позволяет мне написать это:

"Elixir rocks" |> String.upcase() |> String.split()

И я могу ввести функцию для комбинирования перехода и разделения:

upcase_split = fn (data) -> data |> String.upcase() |> String.split() end
"Elixir rocks" |> upcase_split()

Или

upcase_split_shorter = &(&1 |> String.upcase() |> String.split())
"Elixir rocks" |> upcase_split_shorter()

Есть ли способ сделать это без очков? То есть без необходимости давать имя тому первому аргументу, который мне нужно пройти через весь путь?

Это не работает:

nope = String.upcase() |> String.split()

но я надеялся, что было что-то в этом роде, что могло бы?

1 Ответ

0 голосов
/ 18 января 2019

Анонимные функции вызываются иначе, чем обычные функции модуля. Лучше определить вашу функцию в модуле и вызывать ее оттуда, но если вы настаиваете на использовании анонимной функции, вы должны использовать точку для ее вызова. Нравится fun.():

"Elixir rocks" |> (&(&1 |> String.upcase() |> String.split())).()

или просто:

upcase_split_shorter = &(&1 |> String.upcase() |> String.split())
"Elixir rocks" |> upcase_split_shorter.()

Хотя Elixir официально не поддерживает curry , вы можете взглянуть на некоторые пакеты и другие ресурсы, которые его реализуют:

...