Erlang - Macro

Le macro vengono generalmente utilizzate per la sostituzione del codice inline. In Erlang, le macro vengono definite tramite le seguenti istruzioni.

  • -define (Costante, Sostituzione).
  • -define (Func (Var1, Var2, .., Var), Replacement).

Di seguito è riportato un esempio di macro che utilizzano la prima sintassi:

Esempio

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

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

Dal programma sopra puoi vedere che la macro viene espansa usando il '?' simbolo. La costante viene sostituita dal valore definito nella macro.

L'output del programma di cui sopra sarà:

Produzione

1

Un esempio di una macro che utilizza la classe di funzione è il seguente:

Esempio

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

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

L'output del programma di cui sopra sarà:

Produzione

{3}

Le seguenti istruzioni aggiuntive sono disponibili per le macro:

  • undef(Macro)- Annulla la definizione della macro; dopo questo non è possibile chiamare la macro.

  • ifdef(Macro) - Valuta le seguenti righe solo se è stata definita la Macro.

  • ifndef(Macro) - Valuta le seguenti righe solo se Macro non è definita.

  • else- Consentito dopo un'istruzione ifdef o ifndef. Se la condizione era falsa, vengono valutate le istruzioni seguenti.

  • endif - Contrassegna la fine di un'istruzione ifdef o ifndef.

Quando si utilizzano le istruzioni precedenti, è necessario utilizzarle nel modo corretto, come mostrato nel programma seguente.

-ifdef(<FlagName>).

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