erlang 有没有可能调用一个在内部调用'halt()'的函数而不停止我的程序?

jslywgbw  于 2022-12-08  发布在  Erlang
关注(0)|答案(1)|浏览(160)

我试图使用一个库中的函数。我试图使用的函数正在内部调用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).
ehxuflar

ehxuflar1#

修改库是唯一的方法。
有时可以使用the meck library或类似的技巧来替换一个模块或模块中的单个函数,但这对erlang模块不起作用,因为它与语言本身紧密绑定。
您可以尝试模拟my_halt函数,但在这种情况下不会有任何效果,因为compile_cmdline使用my_halt(0)而不是erl_compile2:my_halt(0)my_halt进行本地调用。

相关问题