0

我在模块 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),所以我看不到缺少命名空间是这里错误的根源。

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

4

1 回答 1

7

在 Erlang 中,从另一个模块“导入”一个函数意味着能够像调用本地函数一样调用它,而无需模块前缀。所以有了这个指令:

-import(square, [area/1, perim/1]).

你可以写area(42),它的意思和square:area(42).

但是,如果您包含两个模块中的areaperim函数,那么在编写area(42).

正如您正确指出的那样,您始终可以使用模块名称来限定函数调用,即square:area(42)circle:area(42)- 所以我建议始终这样做并删除两个导入指令。Erlang Programming Rules的第 6.6 条也建议这样做——“不要使用 import”。

于 2013-11-13T11:25:33.520 回答