繁体   English   中英

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

[英]How do I map any given function over a list of values?

我在字符上拆分字符串,并希望修剪生成的拆分中的所有项目。 我希望以下内容可以作为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是否需要匿名函数作为第二个参数? 是否可以将我想要的功能作为参数?

您需要使用& operator 捕获操作员

尝试这个:

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM