epp:parse_file/3函数预处理和解析 Erlang 源文件。对于预处理,它需要所有的宏定义。可能有 3 种可能性。
- 宏可以定义在同一个文件中,或者定义它的 hrl 文件包含在完整路径中。在这种情况下,它会自动解决相同的问题。
- 宏可以在 hrl 文件中定义。然后可以在第二个参数中指定包含文件的目录。例如:
epp:parse_file("test.erl", ["../include"], []).
它搜索目录中的所有文件并解析它。
- 宏可能未定义(或者您可能不希望它在包含目录中搜索)。这将导致表单出现错误。例如
{error,{21,epp,{undefined,'YOURSERVER',none}}},
在这种情况下,您可以在 parse_file 函数本身中指定它。例如
epp:parse_file("yaws.erl", [], [{'YOURSERVER',yourserver}]).
这将解决宏。
因此,如果源文件中有宏,则不必发送它。仅当源或包含中不存在(或不想指定目录)时,才可以在函数中指定它
注意:即使源文件中有它,您也可以发送。但是会有一个{error, redefine, 'YOURSERVER'}
抽象形式的元组。但它将在所有地方用函数中发送的值覆盖。
编辑:
从epp的代码分析我发现目前无法给出参数。epp模块无法处理复杂的宏类型。以当前方式传递函数结构是不可能的。
我已经更改了 epp 文件来处理这种情况。如果您可以更改 epp 文件(仅添加 3 行),您可以查看此链接。