Erlang 函数“Func/Arity”已从“模块”导入

Erlang 函数“Func/Arity”已从“模块”导入,erlang,Erlang,我在sqaure和circle模块中定义了area/1和perim/1 我想在另一个模块中导入并使用它们。这是我的进口声明: -import(square, [area/1, perim/1]). -import(circle, [area/1, perim/1]). 我收到了这些错误信息 ~/test.erl:4: function area/1 already imported from square ~/test.erl:4: function perim/1 already impor

我在sqaure和circle模块中定义了area/1和perim/1

我想在另一个模块中导入并使用它们。这是我的进口声明:

-import(square, [area/1, perim/1]).
-import(circle, [area/1, perim/1]).
我收到了这些错误信息

~/test.erl:4: function area/1 already imported from square
~/test.erl:4: function perim/1 already imported from square
我知道erlang不支持名称空间。但是,由于我们可以通过指定模块(即square:area vs circle:area)来限定函数调用,因此我看不出缺少名称空间是这里错误的根源


那么,究竟是什么导致了上述错误,我如何修复它呢?

在Erlang中,从另一个模块导入函数意味着能够像调用本地函数一样调用它,而不需要模块前缀。因此,根据该指令:

-import(square, [area/1, perim/1]).
你可以写区域42,它的意思和正方形一样:区域42

然而,如果您包含来自两个模块的area和perim函数,那么在编写area42时实际调用哪一个函数将是不明确的


正如您正确地注意到的,您始终可以使用模块的名称限定函数调用,即square:area42和circle:area42-因此我建议一致地这样做,并删除这两个导入指令。这也是《禁止使用导入》第6.6条规则的建议。

谢谢!我认为使用-导入是一个很好的做法!我对java和python等其他语言的误解