我试图使用一个库中的函数。我试图使用的函数正在内部调用erlang:halt()
。所以它将停止VM,我的程序也退出。是否有任何方法可以在不退出程序的情况下调用此函数?
这是试图调用的函数,它来自erlscp。我面临的问题是在这个调用之后没有执行任何东西。我想知道修改这个库是唯一的方法吗?
-spec compile_cmdline([cmd_line_arg()]) -> no_return().
compile_cmdline(List) ->
case compile(List) of
ok -> my_halt(0);
error -> my_halt(1);
_ -> my_halt(2)
end.
-spec my_halt(_) -> no_return().
my_halt(Reason) ->
erlang:halt(Reason).
1条答案
按热度按时间ehxuflar1#
修改库是唯一的方法。
有时可以使用the meck library或类似的技巧来替换一个模块或模块中的单个函数,但这对
erlang
模块不起作用,因为它与语言本身紧密绑定。您可以尝试模拟
my_halt
函数,但在这种情况下不会有任何效果,因为compile_cmdline
使用my_halt(0)
而不是erl_compile2:my_halt(0)
对my_halt
进行本地调用。