何时在Elixir中使用匿名函数?

时间:2017-10-03 16:18:17

标签: elixir

何时在Elixir中使用匿名函数而不是命名函数?

例如我有这个片段:

handle_open = fn
{:ok, :done} -> "OK"
{:error, _} -> "Error:"
end
handle_open.(ExAws.S3.download_file("#{Application.get_env(:ex_aws, :s3)[:bucket_s3]}", "foo.jpg", "../../public") |> ExAws.request);

在这种情况下,我使用匿名函数。如何使用命名函数获得相同的结果(使用多体)?

在这种情况下,使用匿名或命名函数更正确吗?

2 个答案:

答案 0 :(得分:2)

您可以使用case子句或两个函数子句执行单个函数,如下所示:

def handle_open({:ok, :done}), do: "OK"
def handle_open({:error, _}), do: "Error:"

答案 1 :(得分:2)

通常作为参数。

Elixir中的许多标准库函数接受函数作为参数。

例如,Enum.map

[1, 2, 3]
|> Enum.map(fn(number) ->
  number * 2
end)

您还可以定义命名函数

def multiple_by_two(number), do: number * 2

然后抓住它:

Enum.map([1, 2, 3], &multiple_by_two/1)

但第一种方式也经常被使用。