Nor*_*sUp 1 erlang preprocessor
对于我的日志记录,我希望能够在编译时宏指令语句,所以 - 定义为救援!
对于我正在使用erlc -DFOO编译的编译器标志,有没有办法让-ifdef来确定FOO = ok,FOO/0和FOO/1之间的区别?
-module(foo).
-define(FOO, ok).
-define(FOO(X), io:format("~p~n", [X])).
-export([test_x/1]).
%% i want this to be true iff FOO = ok, not if ?FOO/1 exists
-ifdef(FOO).
test_x(X) ->
?FOO(":) " ++ X).
-else.
test_x(X) ->
?FOO(":( " ++ X).
-endif.
Run Code Online (Sandbox Code Playgroud)
我最好写一个更全面的回复.
不,没有办法测试实际的宏定义,你只能测试是否定义了具有该名称的宏.并且您只能测试宏名称,而不能测试具有不同arities的替代宏定义.这是过去的遗留物,在R13B之前,每个名称只能有一个宏定义.新的更接近模仿模块中的功能.
执行此操作的"标准"方法是使用一些标志宏来确定要使用的宏/函数集.例如:
-ifdef(DEBUG).
-define(DEBUG_PRINT(X), <... something long here ...>).
foo(X) -> <... debuggy stuff here ...>.
-else
-define(DEBUG_PRINT(X), ok).
foo(X) -> <... normal stuff here ...>.
-endif.
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
532 次 |
最近记录: |