epp :parse_file/3関数は、Erlang ソース ファイルを前処理して解析します。前処理には、すべてのマクロ定義が必要です。3 つの可能性があります。
- マクロは、同じファイルで定義するか、マクロが定義されている hrl ファイルに完全なパスを含めて定義できます。この場合、自動的に同じものを解決します。
- マクロは、hrl ファイルで定義できます。次に、インクルード ファイルのディレクトリを第 2 引数で指定できます。例:
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 モジュールは複雑なマクロ タイプを処理できません。現在の方法では、Function 構造体を渡すことはできません。
このケースを処理するために epp ファイルを変更しました。変更された epp ファイル (3 行のみ追加) を使用してもよい場合は、このリンクを確認できます。