何时在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);
在这种情况下,我使用匿名函数。如何使用命名函数获得相同的结果(使用多体)?
在这种情况下,使用匿名或命名函数更正确吗?
答案 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)
但第一种方式也经常被使用。