我有一个用rebar编译的erlang程序,在新的debian发行版之后,它就不再编译了,抱怨说:
-import(erl_scan).
-import(erl_parse).
-import(io_lib).说:
不良进口报关
我不知道erlang,我只是想编译这个东西。很明显,-import最近发生了一些不好的事情,http://erlang.org/pipermail/erlang-questions/2013-March/072932.html
有什么简单的方法可以解决这个问题吗?
发布于 2013-05-28 14:59:45
不,没有什么简单的方法可以解决这个问题。源代码必须更新,导入函数的每一个引用都必须以所讨论的模块为前缀。例如,对format的每次调用都应该替换为io_lib:format,尽管您必须知道从哪个模块导入了哪个函数。
您可以从删除-import指令开始。然后编译就会失败,抱怨未定义的函数。这就是您需要提供正确的模块名称的地方。查看库、扫描和解析的文档页面,查看哪些函数在哪个模块中。
发布于 2013-05-28 19:15:56
嗯,-import().正在工作,但是它做的是,而不是,做您期望它做的事情。它不会将“导入”模块到模块中,也不会输出、查找模块并获取所有导出的函数,并允许您在没有模块名称的情况下使用它们。您这样使用-import:
-import(lists, [map/2,foldl/3,foldr/3]).然后,您可以在没有模块名的情况下调用显式导入的函数,编译器通过添加模块名来语法地转换调用。因此编译器将转换:
map(MyFun, List) ===> lists:map(MyFun, List)请注意,这是ALL它所做的。没有检查模块是否存在或函数是否导出,这是一个纯朴素的语法转换。它所提供的只是稍微短一些的代码。由于这个原因,它很少使用,大多数人建议不要使用它。
还请注意,所有操作的代码单元都是模块,因此编译器根本不进行模块间检查或优化。模块之间的一切,比如检查模块是否存在或它导出的函数在运行时在调用另一个模块中的函数时完成。
发布于 2013-05-29 09:48:00
您的问题是,您使用的是实验性的-import(Mod)指令,它是参数化模块的一部分。这些都在R16B和以后的版本中消失了。
我经常建议不要使用进口。这伤害了快速搜索和外国电话的独特命名。获得一个可以快速扩展名称的编辑器。
https://stackoverflow.com/questions/16795192
复制相似问题