问号是什么?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) ->
...
Run Code Online (Sandbox Code Playgroud)
这就是我们在Erlang中表示MACROS的方式.在编译时,这些宏将替换为实际含义.它们可以节省重写代码片段或者抽象出一个参数,您可以在不更改代码的情况下将其更改(只需要重新编译依赖于MACRO的源代码).
例如:
-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.