?MODULE中的问号(在Mochiweb make命令生成的所有代码中都可以看到)是什么意思?
-export([start/1, stop/0, loop/2]).
start(Options) ->
{DocRoot, Options1} = get_option(docroot, Options),
Loop = fun (Req) ->
?MODULE:loop(Req, DocRoot)
end,
mochiweb_http:start([{name, ?MODULE}, {loop, Loop} | Options1]).
stop() ->
mochiweb_http:stop(?MODULE).
loop(Req, DocRoot) ->
...
3条答案
按热度按时间vqlkdk9b1#
它表示预处理器宏。
?MODULE
是扩展到当前模块名称的预定义宏常量之一。vbkedwbf2#
这就是我们在Erlang中表示MACRO的方式。在编译时,这些宏被替换为实际的含义。它们保存了重写代码的时间,或者节省了提取出一个参数的时间,你将来可以在不改变代码的情况下改变这个参数(只需要重新编译依赖于MACRO的源代码)。
例如:
字符串
等同于:
pokxtpni3#
-define(Macro,Replacement).由预处理器使用,以支持宏,使程序具有更多可读性。它可用于条件编译。建议如果一个宏用于多个模块,则将其定义放在包含文件中。
宏定义示例:
使用宏:
预定义宏列表:
来源:https://www.dcs.gla.ac.uk/~amirg/tutorial/erlang/