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,export,[{f,1}]},include,"user.hrl"},1> {function,f,1> [{clause,1> [{var,'User'}],[],1> [{record_fIEld,1> {var,'User'},1> user,1> {atom,name}}]}]}]. ....2> compile:forms(Forms,[return]).{error,[{".",[{1,erl_lint,{undefined_record,user}}]}],[]}
我究竟做错了什么?
解决方法 包含文件和宏由epp(erlang预处理器)处理. compile:forms / 1函数假定已经完成了所有预处理,因此它将{attribute,…}作为一个未知属性处理.与宏相同.今天没有办法在表单列表上运行预处理器.您必须明确包含该文件并执行宏处理.从表单中获取一些输入并从文件中获取一些输入可能看起来有些奇怪.
总结以上是内存溢出为你收集整理的使用包含的头文件编译表单全部内容,希望文章能够帮你解决使用包含的头文件编译表单所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)