【发布时间】:2011-11-18 15:27:07
【问题描述】:
普通的 Erlang 属性可以通过解析转换来修改。这不适用于“-define”属性,因为它们是由预处理器处理的。如果您想更改所有宏的值而不更改文件本身,您会怎么做?
理想情况下,我想调用一些修改后的编译器版本,它会产生以下效果:
使用输入运行时...
...
-define(constant, 45).
-define(debug(X), io:format(X)).
...
?debug(?constant) % Line: 7
...
.. 和一个参数...
something:external
结果将是某种抽象形式,而不是...
{call,7,
{remote,7,{atom,7,io},{atom,7,format}},
[{integer,7,45}]}
...会有:
{call,7,
{remote,7,{atom,7,something},{atom,7,external}},
[{call,7,
{remote,7,{atom,7,something},{atom,7,external}},
[]}]}
当然,生成的代码可能无法执行,但可以对宏的使用进行一些“质量”分析。
【问题讨论】:
标签: macros erlang preprocessor