[英]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.