首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >erlang -import不工作

erlang -import不工作
EN

Stack Overflow用户
提问于 2013-05-28 14:54:05
回答 4查看 6.2K关注 0票数 2

我有一个用rebar编译的erlang程序,在新的debian发行版之后,它就不再编译了,抱怨说:

代码语言:javascript
复制
-import(erl_scan).
-import(erl_parse).
-import(io_lib).

说:

不良进口报关

我不知道erlang,我只是想编译这个东西。很明显,-import最近发生了一些不好的事情,http://erlang.org/pipermail/erlang-questions/2013-March/072932.html

有什么简单的方法可以解决这个问题吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-05-28 14:59:45

不,没有什么简单的方法可以解决这个问题。源代码必须更新,导入函数的每一个引用都必须以所讨论的模块为前缀。例如,对format的每次调用都应该替换为io_lib:format,尽管您必须知道从哪个模块导入了哪个函数。

您可以从删除-import指令开始。然后编译就会失败,抱怨未定义的函数。这就是您需要提供正确的模块名称的地方。查看扫描解析的文档页面,查看哪些函数在哪个模块中。

票数 2
EN

Stack Overflow用户

发布于 2013-05-28 19:15:56

嗯,-import().正在工作,但是它做的是,而不是,做您期望它做的事情。它不会将“导入”模块到模块中,也不会输出、查找模块并获取所有导出的函数,并允许您在没有模块名称的情况下使用它们。您这样使用-import

代码语言:javascript
复制
-import(lists, [map/2,foldl/3,foldr/3]).

然后,您可以在没有模块名的情况下调用显式导入的函数,编译器通过添加模块名来语法地转换调用。因此编译器将转换:

代码语言:javascript
复制
map(MyFun, List) ===> lists:map(MyFun, List)

请注意,这是ALL它所做的。没有检查模块是否存在或函数是否导出,这是一个纯朴素的语法转换。它所提供的只是稍微短一些的代码。由于这个原因,它很少使用,大多数人建议不要使用它。

还请注意,所有操作的代码单元都是模块,因此编译器根本不进行模块间检查或优化。模块之间的一切,比如检查模块是否存在或它导出的函数在运行时在调用另一个模块中的函数时完成。

票数 10
EN

Stack Overflow用户

发布于 2013-05-29 09:48:00

您的问题是,您使用的是实验性的-import(Mod)指令,它是参数化模块的一部分。这些都在R16B和以后的版本中消失了。

我经常建议不要使用进口。这伤害了快速搜索和外国电话的独特命名。获得一个可以快速扩展名称的编辑器。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16795192

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档