将管道运算符与函数一起使用,但不带参数

时间:2019-01-17 21:51:58

标签: elixir

Elixir让我这样写:

"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 :(得分:2)

匿名函数的名称与常规模块函数的名称不同。最好在模块中定义函数并从那里调用它,但是如果您坚持使用匿名函数,则必须使用点来调用它。像fun.()

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

或简单地:

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

虽然Elixir不正式支持currying,但您可以查看实现它的一些软件包和其他资源: