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