Знайомство з Erlang [24]

робота з макросами в erlang -
інструкції управління макросами

продовження попередніх постів про роботу з макросами в erlang

для включення в декілька erlang модулів (файлів .erl)
ми можемо винести макроси та записи (records)
в окремий заголовочний файл з розширенням .hrl

файл test.hrl

-define(M_TEST1, v2).

файл test1.erl

-module(test1).

-include("test.hrl").

-compile ([export_all, nowarn_export_all]).


-if(?M_TEST1 =:= v1).
test1() -> io:format("Macros test1 value = v1 \n").
-elif(?M_TEST1 =:= v2).
test1() -> io:format("Macros test1 value = v2 \n").
-endif.
1> test1:test1().
Macros test1 value = v2 
ok

Пояснення
підтримуються наступні інструкції управління макросами

-undef(Macro). -- розіменування (знищення) макроса, після цієї інструкції макроса наче і не було визначено;
-ifdef(Macro). -- наступні строчки виконуються лише якщо Macro був визначений раніше;
-ifndef(Macro). -- наступні строчки виконуються лише якщо Macro не був визначений раніше;
-else. -- дозволено після ifdef та ifndef , наступні строчки виконуються, якщо попередня умова є false;
-if(Condition). -- наступні строчки виконуються якщо Condition є true;
-elif(Condition). -- дозволено після if та іншої elif інструкції,
якщо попередні if та elif є false а ця Condition є true - виконуються наступні строчки;
-endif. -- вказує закінчення ifdef, ifndef, if та elif інструкцій.

також заголовочний файл .hrl можна підключити в іншому заголовочному файлі

Посилання

https://erlang.org/doc/reference_manual/macros.html
https://medium.com/pragmatic-programmers/macros-c4993f699158
https://erlang.org/doc/getting_started/record_macros.html
http://tryerl.seriyps.ru/