Что означает знак вопроса в синтаксисе Эрланга?
Например:
Json = ?record_to_json(artist, Artist).
Полный контекст источника можно найти здесь.
Что означает знак вопроса в синтаксисе Эрланга?
Например:
Json = ?record_to_json(artist, Artist).
Полный контекст источника можно найти здесь.
Erlang использует знак вопроса, чтобы идентифицировать macros. Напр. рассмотрите приведенный ниже код:
-ifdef(debug).
-define(DEBUG(Format, Args), io:format(Format, Args)).
-else.
-define(DEBUG(Format, Args), void).
-endif.
Как говорится в документации,
Макросы расширяются во время компиляции. Простой макрос
?Const
будет заменен наReplacement
.
Этот фрагмент определяет макрос с именем DEBUG
, который заменяется вызовом для печати строки, если DEBUG
задано во время компиляции. Затем макрос используется в следующем коде:
?DEBUG("Creating ~p for N = ~p~n", [First, N]),
Этот оператор расширяется и заменяется соответствующим содержимым, если установлено DEBUG
. Поэтому вы можете видеть отладочные сообщения только в том случае, если установлен DEBUG
.
Обновление
Благодаря @rvirding:
Значок вопроса означает попытку и расширение того, что следует в качестве макросообщения. Нет ничего запрещающего использовать имя макроса (атом или переменную) как обычный атом или переменную. Таким образом, в примере [выше] вы можете использовать
DEBUG
как обычную переменную столько, сколько вы не префикс ее?
. Смутно, определенно, но не противозаконно.
Основываясь на этой документации, я считаю это синтаксисом для обращения к макросу.
И из Изучите несколько Erlang:
Макросы Erlang действительно похожи на Операторы C '#define', в основном используемые для определения коротких функций и константы. Это простые выражения представленный текстом, который будет заменяется до компиляции кода для ВМ. Такие макросы в основном полезно избегать наличия магических значений плавающие вокруг ваших модулей. Макрос определяется как атрибут модуля форму: -define (MACRO, some_value). и используется как? MACRO внутри любого функция, определенная в модуле. макрос функции может быть записан как -define (sub (X, Y), X-Y). и использовался как? sub (23,47), позже замененный на 23-47 компилятором. Некоторые люди будут использовать более сложные макросы, но основные синтаксис остается тем же.