我正在研究一个问题的解决方案,这需要更改模块 gb_trees 的其中一个功能。

我在编译 gb_trees 的编辑版本时遇到错误:

1> c(gb_trees).
cannot write to .bea#
...
2>

我可以通过什么方式进行更改并编译已经存在的模块?

最佳答案

可能您的文件正被另一个进程使用。关闭您正在使用的所有应用程序或重新启动操作系统,然后尝试重新编译。

您正在尝试手动加载模块,它是 Erlang/OTP 的一部分。

从文档:



code:unstick/1

还:



erl(1)

例如:

$ erl -nostick
Eshell V5.7.3  (abort with ^G)
1> c(gb_trees).
{ok,gb_trees}
2> gb_trees:module_info().
[{exports,[{foo,2},{module_info,0},{module_info,1}]},
 {imports,[]},
 {attributes,[{vsn,[338095567601101424197378397768992511838]}]},
 {compile,[{options,[]},
           {version,"4.6.3"},
           {time,{2011,2,3,11,39,53}},
           {source,"/tmp/gb_trees.erl"}]}]
3>

您会看到我们可以编译模块并将其加载到 VM 中。

但是,您可以将模块 gb_trees 重命名为 gb_trees_mine 之类的名称并使用它导出的函数:
1> gb_trees_mine:foo(13,42).
bar
2>

关于Erlang/OTP : Changes to the already existing modules,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4885443/

10-12 23:27