使用包含的头文件编译表单

使用包含的头文件编译表单,第1张

概述我正在尝试从表单编译模块,包含头文件.首先,如果我在源文件中有模块,一切正常. 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, [ 我正在尝试从表单编译模块,包含头文件.首先,如果我在源文件中有模块,一切正常.

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,…}作为一个未知属性处理.与宏相同.

今天没有办法在表单列表上运行预处理器.您必须明确包含该文件并执行宏处理.从表单中获取一些输入并从文件中获取一些输入可能看起来有些奇怪.

总结

以上是内存溢出为你收集整理的使用包含的头文件编译表单全部内容,希望文章能够帮你解决使用包含的头文件编译表单所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1062247.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存