我正在尝试动态调用模块中的私有方法。
Kernel.apply能够调用公共方法,但是在尝试调用私有方法时遇到了未定义的错误,即使是在我的模块的上下文中也是如此。有没有办法让方法私有但仍然动态调用?
defmodule Test do
def hello() do
IO.puts("hello")
Kernel.apply(Test, :world, []) # This works
Kernel.apply(Test, :worldp, []) # But this doesn't
end
def world() do
IO.puts("world")
end
defp worldp() do
IO.puts("worldp")
end
end
iex(2)> Test.hello
hello
world
** (UndefinedFunctionError) function Test.worldp/0 is undefined or private. Did you mean one of:
* world/0
答案 0 :(得分:1)
Kernel.apply(Test, :worldp, [])
就像Test.worldp()
。
您不能在模块外调用私有函数。
你可以试试这个:
defmodule Test do
def hello() do
IO.puts("hello")
Kernel.apply(&worldp/0, [])
end
defp worldp() do
IO.puts("worldp")
end
end
Test.hello()