Чтобы добавить к тому, что сказал Павел Оброк, причина, по которой он возвращает BadArityError
, заключается в том, что print.()
вызывает вашу print
функцию без аргументов, но ожидает кортеж в качестве аргумента.
Это на самом делемаскировка реальной проблемы - то, что вы вызываете функцию вместо передачи ее в качестве аргумента.Если вы передадите вызов функции print.()
кортежу, разрешив, таким образом, BadArityError
, вы получите реальную ошибку:
Enum.__info__(:functions) |> Enum.each(print.({:foo, :bar}))
foo / bar
** (BadFunctionError), ожидаемый aфункция, полученная:: ok
(elixir) lib / enum.ex: 769: Enum. "- каждый / 2-списки ^ foreach / 1-0 -" / 2
(elixir) lib / enum.ex: 769: Enum.each / 2
Функция print
выполняется, выполняя IO.puts "#{function}/#{arity}"
, как вы можете видеть из вывода foo/bar
, затем возвращает результат IO.puts/1
,:ok
и передает это в качестве второго аргумента Enum.each
.Это вызывает BadFunctionError
, потому что Enum.each
ожидает функцию в качестве второго аргумента, но вы дали результат выполнения функции - атом :ok
.