1

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

4

3 回答 3

5

您可以使用

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

要从另一个模块 ( )导入单个函数(在我的示例中foo/1和) ,请参阅模块文档。无法从模块中导入所有函数,它们必须明确列出。bar/2my_module

另请参阅在 Erlang 中如何从模块中导入所有函数?解释为什么你不应该导入函数!

于 2013-01-04T09:40:38.017 回答
5

不,你不能!@johlo 和 @stemm 给出的方法只是变通方法,允许您不显式地编写模块名称,仅此而已。该-import(...)声明用词不当,并没有达到您的预期。

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

于 2013-01-04T17:03:29.643 回答
1

您可以使用定义代替导入:

-define(SIN(X), math:sin(X)).

my_func(X) -> ?SIN(X).
于 2013-01-04T09:50:51.350 回答