我正在研究一个问题的解决方案,这需要更改 module 的功能之一gb_trees
。
我在编译以下的编辑版本时遇到错误gb_trees
:
1> c(gb_trees).
cannot write to .bea#
...
2>
我可以通过什么方式进行更改和编译已经存在的模块?
我正在研究一个问题的解决方案,这需要更改 module 的功能之一gb_trees
。
我在编译以下的编辑版本时遇到错误gb_trees
:
1> c(gb_trees).
cannot write to .bea#
...
2>
我可以通过什么方式进行更改和编译已经存在的模块?
可能您的文件正在被另一个进程使用。关闭您正在使用的所有应用程序或重新启动操作系统,然后尝试重新编译。
您正在尝试手动加载模块,它是 Erlang/OTP 的一部分。
从文档:
Erlang 运行时系统正在保护您。
最简单的解决方案是重命名您的模块,例如重命名为 mysets.erl。也可以“取消粘贴”包含库模块的目录。
还:
为了防止意外重新加载影响 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>