Elixir:将多个变量传递给函数

时间:2017-06-28 08:57:33

标签: functional-programming pipe elixir

Elixir可以将输入传递给函数,这使得代码更易于阅读。

例如像

这样的东西
sentence  |> String.split(@wordSplitter, trim: true)

将字符串sentence传递给String.split的第一个参数。

现在考虑我也想将第二个参数传递给String.split。有没有可能在Elixir中这样做?我的意思是这样的:

sentence, @wordSplitter |> String.split(trim: true)

谢谢!

1 个答案:

答案 0 :(得分:0)

正如@Dogbert指出的那样,开箱即用是不可能的。尽管如此,助手非常简单:

defmodule MultiApplier do
  def pipe(params, mod, fun, args \\ []) do
    apply(mod, fun, List.foldr(params, args, &List.insert_at(&2, 0, &1)))
  end
end

iex> ["a b c", " "]
...> |> MultiApplier.pipe(String, :split, [[trim: true]]) 
#⇒ ["a", "b", "c"]

iex> ["a b c", " ", [trim: true]]
...> |> MultiApplier.pipe(String, :split, [])             
#⇒ ["a", "b", "c"]

iex> ["a b c"]
...> |> MultiApplier.pipe(String, :split, [" ", [trim: true]])   
#⇒ ["a", "b", "c"]