Erlang - Macros

Las macros se utilizan generalmente para reemplazos de código en línea. En Erlang, las macros se definen mediante las siguientes declaraciones.

  • -define (constante, reemplazo).
  • -define (Func (Var1, Var2, .., Var), Reemplazo).

A continuación se muestra un ejemplo de macros que utilizan la primera sintaxis:

Ejemplo

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

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

En el programa anterior, puede ver que la macro se expande usando el '?' símbolo. La constante se reemplaza en su lugar por el valor definido en la macro.

La salida del programa anterior será:

Salida

1

Un ejemplo de una macro que utiliza la clase de función es el siguiente:

Ejemplo

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

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

La salida del programa anterior será:

Salida

{3}

Las siguientes declaraciones adicionales están disponibles para macros:

  • undef(Macro)- Indefine la macro; después de esto, no puede llamar a la macro.

  • ifdef(Macro) - Evalúa las siguientes líneas solo si se ha definido la macro.

  • ifndef(Macro) - Evalúa las siguientes líneas solo si Macro no está definido.

  • else- Permitido después de una declaración ifdef o ifndef. Si la condición era falsa, se evalúan las siguientes afirmaciones.

  • endif - Marca el final de una declaración ifdef o ifndef.

Al usar las declaraciones anteriores, debe usarse de la manera adecuada como se muestra en el siguiente programa.

-ifdef(<FlagName>).

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