In Elixir, several functions with the same name can be defined in the same Module if their arity differs. This is because Elixir recognizes them as independent functions.
The arity of a function refers to the number of arguments it takes. To determine whether a string is binary, for example, we use the following function:
is_binary("IGBO KWENU")
Because this function only takes one parameter, we call it a one-arity function.
You could find this function expressed as binary/1
in the Elixir docs. Here, /1
denotes its arity.
Arity differs amongst functions with the same name.
In Elixir, functions in the same Module may have the same name yet differ in arity.
For example, we can split a string by its white space:
String.split("Hello World")
String.split/1
would be the function’s name if we were writing about it.
We may also specify a value to divide on:
Let’s take the example of String.split (“Hello,World”, “,”)
. Because it requires two parameters, this method is called String.split/2
.
Despite having the same name, these two functions are functionally separate since their arities differ.
As we can see, a function’s number of parameters defines the function. It would be a little perplexing if we had two functions with the same name that did entirely different things.
In Elixir, lower arity functions frequently delegate to higher arity functions by giving default parameters.
Let’s create a fictitious string splitting module to demonstrate this:
defmodule MyString dodef split(string) dosplit(string, " ")enddef split(string, pattern) do# Split the string by the patternendend
The MyString.split/1
method takes a single string parameter. It then passes a blank space as a default pattern to the MyString.split/2
function.
This implies you can divide a string using the MyString.split/1
method or the MyString.split/2
function with a pattern to split by.