Зачем вызывать Elixir Kernel.apply / 2 вместо вызова анонимной функции? - PullRequest
0 голосов
/ 25 апреля 2020

Зачем использовать apply/2, когда мы можем вызвать анонимную функцию?

Это не одно и то же?

iex(40)> f = fn x -> x + 1 end
#Function<7.126501267/1 in :erl_eval.expr/5>
iex(41)> apply(f, [1])
2
iex(42)> f.(1)
2

1 Ответ

3 голосов
/ 25 апреля 2020

В то время как типичный вариант использования для Kernel.apply/3 будет динамическим c вызовом, когда {m, f, a} не устано c, Kernel.apply/2 [наиболее вероятно] существует, чтобы упростить конвейерную функцию для ее применения.

(&Integer.digits/1) # or any other anonymous function
|> apply([42])      # easy piping to application
|> Enum.join()      # more piping
#⇒ "42"
...