Знайомство з 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/