Returning a Function
Learn how a function can return another function.
We'll cover the following
In Elixir, functions are first-class citizens. We can define a function, assign it to a variable, and then use that variable to invoke the function. We can also pass a function as an argument to another function. This is often referred to as anonymous functions or lambdas in other programming languages.
An Elixir function can also return a function. Let’s elaborate on it through an example.
Here’s the code:
iex> fun1 = fn -> fn -> "Hello" end end
#Function<12.17052888 in :erl_eval.expr/5>
iex> fun1.()
#Function<12.17052888 in :erl_eval.expr/5>
iex> fun1.().()
"Hello"
The first line is hard to read, so let’s spread it out.
fun1 = fn ->
fn ->
"Hello"
end
end
The variable fun1
is bound to a function. That function takes no parameters, and its body is a second function definition. That second function also takes no parameters, and it evaluates the string "Hello"
.
When we call the outer function using fun1.()
, it returns the inner function.
When we call (fun1.().())
, the inner function is evaluated and Hello
is returned.
Get hands-on with 1400+ tech skills courses.