& ampersand - can always I thing about it as
Could you please help me understand how does capture operator
& (ampersand) work under the hood (Elixir or Erlang)?
I went through the whole https://elixir-lang.org/getting-started/introduction.html and one thing I struggled with was the capture operator. Especially when I looked at things like
fun = &*/2 which looked like a dark magic till I realized that
* is a function in
Later I realized that I can rewrite any use of
& from for example
&something(&1) and then to
fn x -> something(x) end.
fn x -> makes more sense to me so it’s nice to mentally translate
fn x -> . BUT, can I always do that?
I’d like to kindly ask, are
fn x -> something(x) end the same thing under the hood of Elixir/Erlang? May I always look at cryptic
&something/1 and say that this is just abbreviation of
fn x -> something(x) end?
P.S. my understanding that following Enum.filter are the same thing under the hood.
defmodule SomeMath do def small_number?(number) do number >= 0 and number < 10 end end IO.puts("let's play") my_list = [-10, -5, 0, 3, 8, 20, 30] my_list |> Enum.filter(fn x -> SomeMath.small_number?(x) end) |> IO.inspect() # [0, 3, 8] my_list |> Enum.filter(&SomeMath.small_number?(&1)) |> IO.inspect() # [0, 3, 8] my_list |> Enum.filter(&SomeMath.small_number?/1) |> IO.inspect() # [0, 3, 8]