Что делает в?оператор / префикс в Эрланге значит? - PullRequest
10 голосов
/ 15 сентября 2011

Что означает вопросительный знак в ? MODULE (который можно увидеть во всем сгенерированном коде командой make Mochiweb)?

-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) ->
    ...

Ответы [ 2 ]

19 голосов
/ 15 сентября 2011

Обозначает макрос препроцессора .?MODULE - это одна из предопределенных констант макроса, которые расширяются до имени текущего модуля.

9 голосов
/ 15 сентября 2011

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