我正在解决问题的解决方案,这需要更改模块gb_trees
的其中一个功能。
编辑gb_trees
的编辑版本时收到错误:
1> c(gb_trees).
cannot write to .bea#
...
2>
我可以通过什么方式进行更改并编译现有模块?
答案 0 :(得分:7)
可能您的文件正由另一个进程使用。关闭所有正在使用的应用程序或重新启动操作系统,然后尝试重新编译。
您正在尝试手动加载模块,该模块是Erlang / OTP的一部分。
来自文档:
Erlang运行时系统是 保护你。
最简单的解决方案是重命名您的 模块,例如到mysets.erl。也是 可以'取消'目录 包含库模块。
请参阅code:unstick/1
。
此外:
防止意外重装 影响Erlang运行时的模块 系统本身,
kernel
,stdlib
和 考虑compiler
个目录 的粘性即可。这意味着该系统 发出警告并拒绝 请求用户是否尝试重新加载 模块驻留在其中任何一个。该 功能可以通过使用禁用 命令行标志-nostick
。
请参阅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>