Unetway

Erlang - Macros

Макросы обычно используются для замены встроенного кода. В Erlang макросы определяются с помощью следующих утверждений.

  • -define (константа, замена).
  • -define (Func (Var1, Var2, .., Var), замена).

Ниже приведен пример макросов с использованием первого синтаксиса -

-module(helloworld). 
-export([start/0]). 
-define(a,1). 

start() -> 
   io:fwrite("~w",[?a]).

Из приведенной выше программы вы можете видеть, что макрос расширяется, используя '?' условное обозначение. Константа заменяется на место значением, определенным в макросе.

-module(helloworld). 
-export([start/0]). 
-define(macro1(X,Y),{X+Y}). 

start() ->
   io:fwrite("~w",[?macro1(1,2)]).

Для макросов доступны следующие дополнительные инструкции:

  • undef (макро) - отменяет макрос; после этого вы не можете вызвать макрос.
  • ifdef (Макро) - вычисляет следующие строки только в том случае, если макрос определен.
  • ifndef (Макро) - вычисляет следующие строки только в том случае, если макрос не определен.
  • else - Разрешено после оператора ifdef или ifndef. Если условие было ложным, выполняются следующие утверждения.
  • endif - Помечает конец инструкции ifdef или ifndef.

При использовании вышеуказанных утверждений его следует использовать надлежащим образом, как показано в следующей программе.

-ifdef(<FlagName>).

-define(...).
-else.
-define(...).
-endif.