如何在值列表上映射任何给定的函数?

时间:2016-09-13 03:09:56

标签: elixir

我在字符上拆分字符串,并希望修剪生成的拆分中的所有项目。我希望以下内容可以作为String.trim/1存在:

iex> "My delimited ! string of doom" |> String.split("!") |> Enum.map(String.trim)
** (UndefinedFunctionError) function String.trim/0 is undefined or private. Did you mean one of:

  * trim/1
  * trim/2

(elixir) String.trim()

我收到UndefinedFunctionError,表示函数String.trim/0不存在。我希望通过传递给Enum.map的匿名函数轻松完成:

iex> "My delimited ! string of doom" |> String.split("!") |> Enum.map(fn (word) -> String.trim(word) end)
["My delimited", "string of doom"]

Enum.map/2是否需要匿名函数作为第二个参数?是否可以将我想要的功能作为参数?

2 个答案:

答案 0 :(得分:7)

您需要使用& operatorCapture operator

试试这个:

iex()> "my delimited ! string of doom" |> String.split("!") |> Enum.map(&String.trim/1)
["my delimited", "string of doom"]

答案 1 :(得分:3)

虽然@ theanh-le的答案肯定是正确的并完全回答了你的问题,但你根本不需要String#trim/1String#split/3接受正则表达式:

iex(1)> "delimited ! string of doom" |> String.split(~r{\s*!\s*})
["delimited", "string of doom"]