Elixir 管道输出到匿名函数
Elixir piping output to an anonymous function
我目前正在学习 elixir,我正在尝试打印函数及其元数
print = fn ({function , arity}) ->
IO.puts "#{function}/#{arity}"
end
Enum.__info__(:functions) |> Enum.each(print.())
这个returns
** (BadArityError) #Function<0.60149952 in file:learn.exs> with arity 1 called with no arguments
learn.exs:5: (file)
(elixir) lib/code.ex:767: Code.require_file/2
您的问题是如何将 print
传递给 Enum.each
。变量 print
已经绑定到一个函数。当您执行 print.()
时,您正在调用不带参数的函数并将结果传递给 Enum.each
。您想要的是将 print
函数本身作为参数传递给 Enum.each
。所以:
Enum.__info__(:functions) |> Enum.each(print)
补充一下 Paweł Obrok 所说的,这个 returns BadArityError
的原因是因为 print.()
调用你的 print
函数没有参数,但它需要一个元组作为它的参数。
这实际上掩盖了真正的问题 - 您正在调用函数而不是将其作为参数传递。如果你通过 print.()
函数调用元组,从而解析 BadArityError
,你会得到真正的错误:
Enum.__info__(:functions) |> Enum.each(print.({:foo, :bar}))
foo/bar
** (BadFunctionError) expected a function, got: :ok
(elixir) lib/enum.ex:769: Enum."-each/2-lists^foreach/1-0-"/2
(elixir) lib/enum.ex:769: Enum.each/2
执行print
函数,执行IO.puts "#{function}/#{arity}"
正如你从foo/bar
输出中看到的那样,然后returnsIO.puts/1
的结果,这是 :ok
,并将其作为第二个参数传递给 Enum.each
。这导致 BadFunctionError
因为 Enum.each
需要一个函数作为它的第二个参数,但是你给出了执行该函数的结果 - 原子 :ok
.
我目前正在学习 elixir,我正在尝试打印函数及其元数
print = fn ({function , arity}) ->
IO.puts "#{function}/#{arity}"
end
Enum.__info__(:functions) |> Enum.each(print.())
这个returns
** (BadArityError) #Function<0.60149952 in file:learn.exs> with arity 1 called with no arguments
learn.exs:5: (file)
(elixir) lib/code.ex:767: Code.require_file/2
您的问题是如何将 print
传递给 Enum.each
。变量 print
已经绑定到一个函数。当您执行 print.()
时,您正在调用不带参数的函数并将结果传递给 Enum.each
。您想要的是将 print
函数本身作为参数传递给 Enum.each
。所以:
Enum.__info__(:functions) |> Enum.each(print)
补充一下 Paweł Obrok 所说的,这个 returns BadArityError
的原因是因为 print.()
调用你的 print
函数没有参数,但它需要一个元组作为它的参数。
这实际上掩盖了真正的问题 - 您正在调用函数而不是将其作为参数传递。如果你通过 print.()
函数调用元组,从而解析 BadArityError
,你会得到真正的错误:
Enum.__info__(:functions) |> Enum.each(print.({:foo, :bar}))
foo/bar
** (BadFunctionError) expected a function, got: :ok
(elixir) lib/enum.ex:769: Enum."-each/2-lists^foreach/1-0-"/2
(elixir) lib/enum.ex:769: Enum.each/2
执行print
函数,执行IO.puts "#{function}/#{arity}"
正如你从foo/bar
输出中看到的那样,然后returnsIO.puts/1
的结果,这是 :ok
,并将其作为第二个参数传递给 Enum.each
。这导致 BadFunctionError
因为 Enum.each
需要一个函数作为它的第二个参数,但是你给出了执行该函数的结果 - 原子 :ok
.