有人可以解释这种erlang函数调用格式:do(Param,{?MODULE,[a]})

有人可以解释这种erlang函数调用格式:do(Param,{?MODULE,[a]}),erlang,mochiweb,Erlang,Mochiweb,例如: -module(func). %% ==================================================================== %% API functions %% ==================================================================== -export([do/2]). do(Param, {?MODULE,[a]}) -> Param. 为什么我可以通过 {

例如:

-module(func).

%% ====================================================================
%% API functions
%% ====================================================================
-export([do/2]).


do(Param, {?MODULE,[a]}) ->
    Param.
为什么我可以通过

{func,[a]}:do(1)
通过返回“1”,呼叫成功


我在Erlang文档中看不到任何解释。但是mochiweb中有很多用法,例如:

它们是为了向后兼容而存在的,通常不推荐使用,这可能就是为什么没有太多易于访问的官方文档的原因。显示了在Erlang/OTP R16B版中删除“参数化模块”功能之前,这些模块的外观。谢谢。答案很清楚,你问的是两个完全不同的问题。为了回答标题中的问题,关于
do(Param,{MODULE,[a]})
没有什么特别之处:
?MODULE
是一个标准宏,由模块名替换,因此您有一个完全正常的模式匹配定义:
do(Param,{func,[a]})->……
您通常称之为
func:do(1,{func,[a]})
。其他注释解释了为什么也可以将其称为
{func[a]}:do(1)