【问题标题】:Passing a function to Enum.map in Elixir在 Elixir 中将函数传递给 Enum.map
【发布时间】:2018-02-05 16:41:20
【问题描述】:

我正在学习 Elixir,我想知道是否有更好的方法将函数指针传递给 Enum.map。我有这个代码:

defmodule MyModule do

    defp greet(person) do
        IO.puts "Hello " <> person
    end

    def main() do
        people = ["Manuel Bartual", "El hijo de la Tomasa"]
        Enum.map(people, &greet/1)
    end

end

它工作正常,但我想知道是否有另一种方法可以做到这一点,而不是使用&amp;greet/1

【问题讨论】:

  • &amp;greet/1 有什么问题(据 José 说,这显然是 Elixir 有史以来最好的功能)?换句话说,你希望它看起来像什么?例如,Enum.map(people, fn person -&gt; IO.puts "Hello " &lt;&gt; person end) 可以。 Enum.map(people, &amp;greet(&amp;1)) 也可以。
  • 其实没关系,但我只是想知道这是否是惯用的方式。我刚开始使用 Elixir。
  • 视情况而定。如果私有函数MyModule.greet/1存在的唯一目的是用作映射器,我会选择裸fn person -&gt; ... end
  • 明白了,谢谢

标签: elixir


【解决方案1】:

更惯用的是:

def main do
  ["Manuel Bartual", "El hijo de la Tomasa"]
  |> Enum.map(&greet/1)
end
  1. should not use parentheses 当函数中不需要参数时。

  2. pipeline operator (|&gt;) 是 Elixir 最惯用的功能之一。它说,获取刚刚评估的结果并调用以下函数,将该结果作为第一个参数传递。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-09-03
    • 1970-01-01
    • 2020-07-17
    • 1970-01-01
    • 2014-08-26
    • 1970-01-01
    • 2017-06-24
    • 1970-01-01
    相关资源
    最近更新 更多