Elixir/Erlang中的命名函数是否等效于__MODULE__?

Cha*_*gwu 5 erlang elixir

有没有相同的方法来检索函数的名称,就像__MODULE__在Elixir/Erlang中检索模块的名称一样?

例:

defmodule Demo do
  def home_menu do
    module_name = __MODULE__
    func_name = :home_menu 
    # is there a __FUNCTION__
  end
End
Run Code Online (Sandbox Code Playgroud)

EDITED

选定的答案有效,

但使用apply/3调用返回的函数名会产生此错误:

[error] %UndefinedFunctionError{arity: 4, exports: nil, function: :public_home, module: Demo, reason: nil}
Run Code Online (Sandbox Code Playgroud)

我有一个功能:

defp public_home(u, m, msg, reset) do

end
Run Code Online (Sandbox Code Playgroud)

有问题的功能将严格在其模块中调用.

有没有办法在自己的模块中按名称动态调用私有函数?

Ale*_*kin 14

? defmodule M, do: def m, do: __ENV__.function  
? M.m                                                 
#? {:m, 0}
Run Code Online (Sandbox Code Playgroud)

从本质上讲,__ENV__结构包含您可能需要的一切.

  • 它是公开的吗?您是否模式匹配并仅传递名称? (3认同)
  • 无法从外部访问私人活动. (3认同)