1

我在 Rebar 下捆绑了一个 Erlang 应用程序(现在只有几个库模块)。目录结构如下所示:

MyProject  
- apps  
-- myapp  
--- ebin  
--- src  
--- yada   
- rebar  
- rebar.conf  

MyProject$ ./rebar compile 按预期响应。

我打开 Erlang shell ( MyProject$ erl -pa apps/*/ebin myapp ) 并且可以很好地执行导出的函数。

现在我编辑一个源文件,添加一个导出的函数,然后重新编译。但是,哇——当我尝试执行新导出的函数时,我得到一个错误——未定义的函数。我在 Erlang shell 中执行 myAppModule:module_info/0 。它没有列出我刚刚添加到源文件中的新函数,也没有列出我对其他函数所做的更改。

我删除了相关的 *.beam 文件并重新编译。仍然看不到我的变化。

但是,现在我 q() 退出 Erlang shell 并重新进入。你知道什么!一切正常,包括我的新功能。

为什么会这样?

4

1 回答 1

6

你如何重新编译?从shell还是如何?

请注意,如果您在执行 erlang 的“外部”重新编译文件,那么您将明确地必须l(myAppModule).在 shell 中重新加载模块(使用 a )。如果您从 shell 重新编译(使用 a c(myAppModule).),则模块将被重新编译并重新加载,但.beam文件不会放在ebin目录中,而是在当前工作目录中。

于 2012-08-04T17:29:50.853 回答