Elixir可以将输入传递给函数,这使得代码更易于阅读。
例如像
这样的东西sentence |> String.split(@wordSplitter, trim: true)
将字符串sentence
传递给String.split
的第一个参数。
现在考虑我也想将第二个参数传递给String.split
。有没有可能在Elixir中这样做?我的意思是这样的:
sentence, @wordSplitter |> String.split(trim: true)
谢谢!
答案 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"]