我在模块sqaure和circle中定义了area/1和perim/1.
我想导入并在另一个模块中使用它们.这是我的导入声明:
-import(square, [area/1, perim/1]).
-import(circle, [area/1, perim/1]).
Run Code Online (Sandbox Code Playgroud)
我收到了这些错误消息.
~/test.erl:4: function area/1 already imported from square
~/test.erl:4: function perim/1 already imported from square
Run Code Online (Sandbox Code Playgroud)
我知道erlang不支持命名空间.但是因为我们可以通过指定模块来限定函数调用(即square:area vs circle:area),所以我没有看到缺少命名空间是错误的来源.
那么,究竟是什么导致了上述错误,我该如何解决呢?
在Erlang中,从另一个模块"导入"一个函数意味着能够将其称为本地函数,而不是模块前缀.所以使用这个指令:
-import(square, [area/1, perim/1]).
Run Code Online (Sandbox Code Playgroud)
你可以写area(42),这意味着同样的square:area(42).
但是,如果包括area与perim来自两个模块的功能,这将是含糊不清哪一个写的时候你会实际调用area(42).
当你正确地指出,你可以随时与模块,即名称限定函数调用square:area(42)和circle:area(42)-所以我建议这样做一致和消除两个导入指令.这也是Erlang编程规则 6.6的规则 - "不要使用导入".