3
我正在解决某个问题,这需要更改模块gb_trees
的某个功能。Erlang/OTP:对现有模块的更改
我得到一个错误编译gb_trees
编辑后的版本:
1> c(gb_trees).
cannot write to .bea#
...
2>
什么是我可以修改和编译一个已经存在的模块的方法是什么?
我正在解决某个问题,这需要更改模块gb_trees
的某个功能。Erlang/OTP:对现有模块的更改
我得到一个错误编译gb_trees
编辑后的版本:
1> c(gb_trees).
cannot write to .bea#
...
2>
什么是我可以修改和编译一个已经存在的模块的方法是什么?
可能是您的文件正在被另一个进程使用。关闭所有正在使用的应用程序或重新启动操作系统,然后尝试重新编译。
您试图手动加载模块,这是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>
你看,我们可以编译和模块加载到虚拟机。
但是你可以在你的模块gb_trees
只是重命名为类似gb_trees_mine
和使用功能,它出口:
1> gb_trees_mine:foo(13,42).
bar
2>