?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) ->
...
答案 0 :(得分:19)
表示a preprocessor macro。 ?MODULE
是扩展为当前模块名称的预定义宏常量之一。
答案 1 :(得分:9)
这就是我们在Erlang中表示MACROS的方式。在编译时,这些宏将替换为实际含义。他们可以节省重写代码或者抽象出一个你可能在未改变代码的情况下改变的参数(只需要重新编译依赖于MACRO的源代码)。
Forexample:
-module(square_plus). -compile(export_all). -define(SQUARE(X),X * X). add_to_square(This,Number)-> ?SQUARE(This) + Number.
与:
相同-module(square_plus). -compile(export_all). add_to_square(This,Number)-> (This * This) + Number.