Capture Operator &
The Capture operator, denoted as &, is a unique feature in Elixir that enables the creation of anonymous functions, often in a more succinct and readable way than the traditional fn → end syntax.
The Capture operator is often used to create quick, inline functions. Here’s a simple example:
iex> add = &(&1 + &2)
#Function<12.128620087/2 in :erl_eval.expr/5>
iex> add.(1, 2)
3In the above example, &(&1 + &2) creates an anonymous function that adds two arguments together. The placeholders &1 and &2 refer to the first and second arguments, respectively. The function is then assigned to the variable add, and it can be invoked with add.(1, 2).
The Capture operator isn’t just for simple functions. It can be used with more complex expressions and even function calls:
iex> double = &(&1 * 2)
#Function<6.128620087/1 in :erl_eval.expr/5>
iex> double.(10)
20In the above example, &(&1 * 2) creates an anonymous function that doubles its argument.
You can also use the Capture operator to reference named functions from modules. For example, to reference the length function from the List module:
iex> len = &length/1
&:erlang.length/1
iex> len.([1, 2, 3, 4, 5])
5In the example above, &length/1 captures the length function from the which takes one argument (/1). This function is then assigned to the variable len.