Normalmente você verá as funções com essa representação map/2 ou Enum.map/2. Esse número após a barra se chama aridade. Ela vem da matemática onde significa o número de argumentos ou de operandos que uma função ou operação requer.
Ele tem o mesmo significado no Elixir. Ele indica quantos argumentos essa função necessita para ser executada. No exemplo acima temos o Enum.map/2. Leia-se que a função map do módulo Enum precisa de dois argumentos para poder ser utilizado.
Podemos fazer esse teste passar dizendo que esperamos que falhe quando isso aconteça. Vamos alterar nosso teste para esperar por iso.
test/math_test.exs
defmodule MathTest do
use ExUnit.Case
describe "multiple/2" do
# ...
test "fail: Insufficient Arguments" do
expected = "function Math.multiple/1 is undefined or private"
assert_raise UndefinedFunctionError, expected, fn ->
Math.multiple(3)
end
end
end
end
O relatório de erro avisa que não temos uma função say_my_name de aridade 1 (say_my_name/1) e sugestiona a outra que criamos no exemplo anterior say_my_name/1. Para fazer esse teste passar, precisamos criar uma nova função say_my_name que suporte receber apenas um argumento.
Diferente de algumas linguagem de programação, Elixir suporte multiplas definições de uma mesma função.
Rodando o teste agora, você terá um relatório de sucesso.
mix test test/person_test.exs
Compiling 1 file (.ex)
....
Finished in 0.01 seconds (0.00s async, 0.01s sync)
2 tests, 0 failures
Quando chamamos uma função que tem mais de uma definição ela irá começar da primeira definição a que esta mais ao topo do aqruivo para baixo, parando na primeira oportunidade.