Elixir/Erlang中的命名函数是否有一个与_模块__等效的函数?

Elixir/Erlang中的命名函数是否有一个与_模块__等效的函数?,erlang,elixir,Erlang,Elixir,是否有一个类似于\uuuuu MODULE\uuuu检索Elixir/Erlang中的模块名称的函数名称的等价物 例如: defmodule Demo do def home_menu do module_name = __MODULE__ func_name = :home_menu # is there a __FUNCTION__ end End 编辑 选择的答案有效 但是使用apply/3调用返回的函数名会产生以下错误: [error] %Undefi

是否有一个类似于
\uuuuu MODULE\uuuu
检索Elixir/Erlang中的模块名称的函数名称的等价物

例如:

defmodule Demo do
  def home_menu do
    module_name = __MODULE__
    func_name = :home_menu 
    # is there a __FUNCTION__
  end
End
编辑

选择的答案有效

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

[error] %UndefinedFunctionError{arity: 4, exports: nil, function: :public_home, module: Demo, reason: nil}
我有一个功能:

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

end
该函数将严格在其模块内调用

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

▶ defmodule M, do: def m, do: __ENV__.function  
▶ M.m                                                 
#⇒ {:m, 0}

基本上,
\uuuuu ENV\uuuu
结构包含您可能需要的所有内容。

是的,有。在Erlang中,有一些应用程序应该能够提供您所需的信息:

% The name of the current function
?FUNCTION_NAME

% The arity of the current function (remember name alone isn't enough to identify a function in Erlang/Elixir)
?FUNCTION_ARITY 

% The file name of the current module
?FILE 

% The line number of the current line
?LINE 

来源:

@OnorioCatenacci我明白你的意思。该函数将严格在其模块内调用。有没有一种方法可以在私有函数自己的模块内按名称动态调用该函数?是否递归地尝试从函数本身调用该函数?在这种情况下,虽然我可以看到不必指定函数名的吸引力,但我认为您应该咬紧牙关,在函数体中对其进行硬编码。@OnorioCatenacci否。我存储用户执行的上一个和当前函数。我需要能够用它来回溯和前进。每个方法相当于一个菜单/页面。我正在尝试使用apply调用user.current或user.previous函数Code.eval\u字符串如何?这能满足你的需要吗?@你知道每个人的长生不老药等效物吗?不知道,但看起来@mudasobwa的答案在长生不老药中有效
\uu环境函数
相当于
{function\u NAME,?function\u ARITY}
。这是Elixir和Erlang有很大差异的一个领域,因此很难找到两者之间完全相同的工作方式。不,不是:我对此有点困惑,我可以得到函数名,但使用apply/3调用它失败:
[error]%UndefinedFunctionError{arity:4,exports:nil,function::public_home,module:Demo,reason:nil}
它是公共的吗?是否只匹配模式并传递名称?无法从外部访问私有函数。