繁体   English   中英

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

[英]Is there an equivalent to __MODULE__ for named functions in Elixir/ Erlang?

是否有类似的方法可以检索 function 的名称,就像__MODULE__在 Elixir/Erlang 中检索模块的名称一样?

例子:

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

已编辑

所选答案有效,

但是使用 apply/3 调用返回的 function 名称会产生此错误:

[error] %UndefinedFunctionError{arity: 4, exports: nil, function: :public_home, module: Demo, reason: nil}

我有一个 function:

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

end

有问题的 function 将在其模块内严格调用。

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

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

从本质上讲, __ENV__结构包含您可能需要的所有内容。

就在这里。 在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 

资料来源: http//erlang.org/doc/reference_manual/macros.html#id85926

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM