我正在尝试从包含头文件的表单编译模块。首先,如果我有源文件中的模块,一切正常。使用包含的头文件编译表单
user.hrl
-record(user, {name :: string()}).
zed.erl
-module(zed).
-export([f/1]).
-include("user.hrl").
f(User) ->
User#user.name.
壳
1> compile:file(zed, [return]).
{ok,zed,[]}
2> rr("user.hrl").
[user]
3> zed:f(#user{name = "Zed"}).
"Zed"
如果我尝试编译同一模块从表单中,我得到一个未定义的记录错误。玩{i, Dir}
和其他选项没有帮助。
壳
1> Forms = [{attribute,1,module,zed},
1> {attribute,1,export,[{f,1}]},
1> {attribute,1,include,"user.hrl"},
1> {function,1,f,1,
1> [{clause,1,
1> [{var,1,'User'}], [],
1> [{record_field,1,
1> {var,1,'User'},
1> user,
1> {atom,1,name}}]}]}].
....
2> compile:forms(Forms, [return]).
{error,[{".",[{1,erl_lint,{undefined_record,user}}]}],[]}
我在做什么错?
感谢。我被这个文件误导了。所以基本上我可以1)自己获取标题,将它们解析为表单,并用它们替换属性,或者2)将我的表单打印到源文件,然后编译。 – Zed 2010-01-07 07:29:31
就是这样。或者修复epp。 :-) – rvirding 2010-01-07 19:40:02
仅供参考,有一个模块用于对erl_scan返回的令牌进行预处理:https://github.com/evanmiller/aleppo – Emiller 2010-12-13 22:02:53