Erlang 为什么我的重新编译过程不能在控制台内部工作?

Erlang 为什么我的重新编译过程不能在控制台内部工作?,erlang,rebar,erlang-shell,Erlang,Rebar,Erlang Shell,我有一个Erlang应用程序(目前只有几个库模块)捆绑在Rebar下。目录结构如下所示: MyProject - apps -- myapp --- ebin --- src --- yada - rebar - rebar.conf MyProject$。/按预期响应 我打开Erlang shell(MyProject$erl-pa apps/*/ebin myapp),可以很好地执行导出的函数 现在我编辑一个源文件,添加一个导出的函数,然后重新编译。但是,

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

MyProject  
- apps  
-- myapp  
--- ebin  
--- src  
--- yada   
- rebar  
- rebar.conf  
MyProject$。/按预期响应

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

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

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

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


为什么会这样?

如何重新编译?从贝壳还是怎样


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

如何重新编译?从贝壳还是怎样


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

我从项目目录编译:./rebar compile。因此,我将尝试l(myAppModule)方法。我从项目目录编译:./rebar compile。因此,我将尝试l(myAppModule)方法。