Erlang - 宏

宏通常用于内联代码替换。 在 Erlang 中,宏是通过以下语句定义的。

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

以下是使用第一种语法的宏示例 −

示例

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

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

从上面的程序中您可以看到宏是通过使用'?'符号来扩展的。 该常量被宏中定义的值替换。

上述程序的输出将是 −

输出

1

使用函数类的宏示例如下 −

示例

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

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

上述程序的输出将是 −

输出

{3}

以下附加语句可用于宏 −

  • undef(Macro) − 取消宏定义;此后您将无法调用宏。

  • ifdef(Macro) − 仅当宏已定义时才计算以下行。

  • ifndef(Macro) − 仅当宏未定义时才计算以下行。

  • else − 允许在 ifdef 或 ifndef 语句之后使用。 如果条件为 false,则评估 else 后面的语句。

  • endif − 标记 ifdef 或 ifndef 语句的结束。

使用上述语句时,应按照以下程序所示正确使用。

-ifdef(<FlagName>).

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