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 语句之后使用。如果条件为假,则评估 else 之后的语句。

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

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

-ifdef(<FlagName>).

-define(...).
-else.
-define(...).
-endif.
广告