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()
但是我希望可能有类似的东西吗?
答案 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,但您可以查看实现它的一些软件包和其他资源: