在Erlang中打开一个模块

时间:2013-01-04 08:56:39

标签: module erlang

有没有办法在Erlang中打开一个模块,然后在不使用模块名前缀的情况下调用它的函数? 就像打开ML结构一样!

3 个答案:

答案 0 :(得分:5)

您可以使用

-import(my_module, [foo/1,bar/2]).

从其他模块(foo/1)导入单个函数(在我的示例中为bar/2my_module),请参阅modules documentation。无法从模块导入所有函数,必须明确列出它们。

另请参阅In Erlang how can I import all functions from a module?,了解不应导入函数的原因!

答案 1 :(得分:5)

不,你不能! @johlo和@stemm给出的方法只是解决方法,它允许您不显式写入模块名称,但这就是全部。 -import(...)声明是用词不当,并不符合您的预期。

鉴于Erlang对代码的动态处理,它实际上也毫无意义。无法保证在运行时您拥有与编译时相同的“其他”模块,或者它是否存在。所有代码处理,编译/加载/清除/重新加载/等。 ,是基于模块完成的,没有模块间的依赖关系或优化。

答案 2 :(得分:1)

您可以使用定义:

代替导入
-define(SIN(X), math:sin(X)).

my_func(X) -> ?SIN(X).