有没有一种方法可以在 Elixir 中返回函数定义

6

假设我有一个模块:

defmodule Foo do
  def bar(baz) do
    IO.puts baz
  end
end

有没有什么方法可以返回:

def bar(baz) do
  IO.puts baz
end

我已经想到了一种方法可以加载整个模块的定义,具体做法如下:
Foo.__info__(:compile) |> List.last |> elem(1) |> File.read |> elem(1)

但理想情况下,我希望能够像这样做一些事情:
Foo.bar/1.__definition__
#=> def bar(baz) do\n  IO.puts baz\nend\d

我认为你需要深入了解Erlang - 请参阅https://dev59.com/dm435IYBdhLWcg3wuikn - GavinBrelstaff
所以你在问是否可能反编译函数定义?我认为答案是否定的。 - Onorio Catenacci
我仍然抱有希望,如果失败了,我可能不得不考虑自己编写。 - Hackling
1个回答

3

Elixir是一种编译型语言。在运行时,源代码已经被编译成了BEAM字节码,因此没有源代码级别的函数表示形式可以供您的代码检查或检索。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接