"init terminating in do_boot" 执行 Erlang 脚本时抛出
"init terminating in do_boot" is thrown when executing Erlang script
这是我在 'factorial.erl' 中的代码:
-module(factorial).
-author("jasonzhu").
%% API
-export([fac/1]).
fac(0) -> 1;
fac(N) -> N * fac(N-1).
在提示中交互此代码时,它工作正常:
1> c(factorial).
{ok,factorial}
2> factorial:fac(20).
2432902008176640000
但是如果我从命令行编译并执行它,就会出现一些错误。
Jasons-MacBook-Pro:src jasonzhu$ erlc factorial.erl
Jasons-MacBook-Pro:src jasonzhu$ erl -noshell -s factorial fac 20 -s init stop
{"init terminating in do_boot",{badarith,[{factorial,fac,1,[{file,"factorial.erl"},{line,8}]},{init,start_it,1,[]},{init,start_em,1,[]}]}}
Crash dump was written to: erl_crash.dump
init terminating in do_boot ()
有人能帮帮我吗?我是 Erlang 的新手,非常感谢!
-noshell语法是
erl -noshell -s Module Function Arguments
其中 Arguments 是一个原子列表。所以你必须从列表中获取 'fac' 参数并将其转换为整数。
这个
-module(factorial).
-export([fac/1]).
fac([N]) ->
X = fac(list_to_integer(atom_to_list(N))),
io:format("~p~n", [X]);
fac(0) -> 1;
fac(N) -> N * fac(N-1).
有效
>>> erl -noshell -s factorial fac 20 -s init stop
2432902008176640000
此选项并非特定于 OP 的问题,除了官方文档 How to Interpret the Erlang Crash Dumps
之外,对于来自“init terminating in do_boot”搜索的人可能有用
如果您的代码搁置了一段时间,然后您再次开始使用它,重新编译可能会消除此错误
- 删除_build/目录
- 删除rebar.lock个文件
- 编译
/dir_with_rebarconfig$ rebar3 release
这是我在 'factorial.erl' 中的代码:
-module(factorial).
-author("jasonzhu").
%% API
-export([fac/1]).
fac(0) -> 1;
fac(N) -> N * fac(N-1).
在提示中交互此代码时,它工作正常:
1> c(factorial).
{ok,factorial}
2> factorial:fac(20).
2432902008176640000
但是如果我从命令行编译并执行它,就会出现一些错误。
Jasons-MacBook-Pro:src jasonzhu$ erlc factorial.erl
Jasons-MacBook-Pro:src jasonzhu$ erl -noshell -s factorial fac 20 -s init stop
{"init terminating in do_boot",{badarith,[{factorial,fac,1,[{file,"factorial.erl"},{line,8}]},{init,start_it,1,[]},{init,start_em,1,[]}]}}
Crash dump was written to: erl_crash.dump
init terminating in do_boot ()
有人能帮帮我吗?我是 Erlang 的新手,非常感谢!
-noshell语法是
erl -noshell -s Module Function Arguments
其中 Arguments 是一个原子列表。所以你必须从列表中获取 'fac' 参数并将其转换为整数。
这个
-module(factorial).
-export([fac/1]).
fac([N]) ->
X = fac(list_to_integer(atom_to_list(N))),
io:format("~p~n", [X]);
fac(0) -> 1;
fac(N) -> N * fac(N-1).
有效
>>> erl -noshell -s factorial fac 20 -s init stop
2432902008176640000
此选项并非特定于 OP 的问题,除了官方文档 How to Interpret the Erlang Crash Dumps
之外,对于来自“init terminating in do_boot”搜索的人可能有用如果您的代码搁置了一段时间,然后您再次开始使用它,重新编译可能会消除此错误
- 删除_build/目录
- 删除rebar.lock个文件
- 编译
/dir_with_rebarconfig$ rebar3 release