Ответ 1
Он обозначает макрос препроцессора. ?MODULE
- одна из предопределенных констант макросов, которые расширяются до текущего имени модуля.
Что означает знак вопроса в ? 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) ->
...
Он обозначает макрос препроцессора. ?MODULE
- одна из предопределенных констант макросов, которые расширяются до текущего имени модуля.
Хорошо, так мы представляем MACROS в Erlang. Во время компиляции эти макросы заменяются фактическими значениями. Они сохраняют возможность повторного написания фрагментов кода или абстрагирования параметра, который вы можете изменить в будущем, без изменения кода (требуется только перекомпиляция источника, который зависит от 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.