是否有类似于检索函数的名称,就像__MODULE__
检索Elixir / Erlang中的模块名一样?
示例:
defmodule Demo do
def home_menu do
module_name = __MODULE__
func_name = :home_menu
# is there a __FUNCTION__
end
End
EDITED
所选答案有效,
但是使用apply / 3调用返回的函数名会产生此错误:
[error] %UndefinedFunctionError{arity: 4, exports: nil, function: :public_home, module: Demo, reason: nil}
我有一个功能:
defp public_home(u, m, msg, reset) do
end
有问题的功能将严格在其模块中调用。
有没有办法在自己的模块中按名称动态调用私有函数?
答案 0 :(得分:10)
▶ defmodule M, do: def m, do: __ENV__.function
▶ M.m
#⇒ {:m, 0}
基本上,__ENV__
结构包含您可能需要的所有内容。
答案 1 :(得分:2)
是的,有。在Erlang中,several predefined macros应该能够提供您需要的信息:
% 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