函数'Func/Arity'已从'Module'导入

Ant*_*ong 0 erlang

我在模块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),所以我没有看到缺少命名空间是错误的来源.

那么,究竟是什么导致了上述错误,我该如何解决呢?

leg*_*cia 7

在Erlang中,从另一个模块"导入"一个函数意味着能够将其称为本地函数,而不是模块前缀.所以使用这个指令:

-import(square, [area/1, perim/1]).
Run Code Online (Sandbox Code Playgroud)

你可以写area(42),这意味着同样的square:area(42).

但是,如果包括areaperim来自两个模块的功能,这将是含糊不清哪一个写的时候你会实际调用area(42).

当你正确地指出,你可以随时与模块,即名称限定函数调用square:area(42)circle:area(42)-所以我建议这样做一致和消除两个导入指令.这也是Erlang编程规则 6.6的规则 - "不要使用导入".