我有一个用rebar编译的erlang程序,在新的debian发布之后,它将不再编译,抱怨这个:
-import(erl_scan).
-import(erl_parse).
-import(io_lib).
Run Code Online (Sandbox Code Playgroud)
他说:
糟糕的进口申报
我不知道erlang,我只是想编译这个东西.显然最近发生了一件坏事 - 最近进入http://erlang.org/pipermail/erlang-questions/2013-March/072932.html
有没有一种简单的方法来解决这个问题?
那么,-import().是工作,但它确实不是做你期望它做的事.它不是 "进口"的模块到你的模块,也不出门,找到该模块,并得到所有导出功能,并允许您使用它们,而不模块的名字.你这样使用-import:
-import(lists, [map/2,foldl/3,foldr/3]).
Run Code Online (Sandbox Code Playgroud)
然后,您可以在没有模块名称的情况下调用显式导入的函数,编译器通过添加模块名称在语法上转换调用.所以编译器将转换:
map(MyFun, List) ===> lists:map(MyFun, List)
Run Code Online (Sandbox Code Playgroud)
请注意,这就是它的全部功能.没有检查模块是否存在或者是否导出函数,它是一个纯粹的天真语法转换.所有它给你的代码略短.因此,很少有人建议不要使用它.
另请注意,所有操作的代码单元都是模块,因此编译器根本不进行任何模块间检查或优化.当您在另一个模块中调用函数时,模块之间的所有内容(如检查模块是否存在或导出的函数)都是在运行时完成的.
| 归档时间: |
|
| 查看次数: |
4088 次 |
| 最近记录: |