如何解决Erlang Nitrogen 教程项目不起作用
我正在关注氮项目页面上的教程: starter tutorial here
当我将浏览器指向 localhost:8000
时,它不起作用。
我怀疑这与以下命令有关:
make rel_inets;
/home/david/programming/erlang/nitrogen/nitrogen/rel/nitrogen/lib/erlware_commons/src/ec_cmd_log.erl:160:5: ambiguous call of overridden auto-imported BIF error/3
**-** use erlang:error/3 or "-compile({no_auto_import,[error/3]})." to resolve name clash Compiling /home/david/programming/erlang/nitrogen/nitrogen/rel/nitrogen/lib/erlware_commons/src/ec_cmd_log.erl Failed: ERROR: compile Failed while processing /home/david/programming/erlang/nitrogen/nitrogen/rel/nitrogen/lib/erlware_commons: rebar_abort make[4]: *** [Makefile:12: compile] Error 1
有人知道出了什么问题吗?看起来函数名之间有些冲突。 我安装了最新的 erlang 24.0.1,但仍然有相同的行为。 谢谢
解决方法
有人知道出了什么问题吗?
这是一个例子...Erlang 定义了一个函数 error/2
,称为 BIF 或 Built In Function,可以这样调用:
-module(a).
-compile(export_all).
go(X,Y) ->
case X > 10 of
true -> error(bad_arg,[X,Y]);
false -> ok
end,io:format("hello\n").
在外壳中:
4> c(a).
a.erl:2: Warning: export_all flag enabled - all functions will be exported
{ok,a}
5> a:go(1,2).
hello
ok
6> a:go(11,2).
** exception error: bad_arg
in function a:go/2
called as a:go(11,2)
7>
现在,看看如果您在模块中定义一个名为 error/2
的函数会发生什么:
-module(a).
-compile(export_all).
error(X,Y) ->
io:format("X = ~w,Y = ~w~n",Y]).
go(X,io:format("hello\n").
在外壳中:
8> c(a).
a.erl:2: Warning: export_all flag enabled - all functions will be exported
a.erl:9: Warning: ambiguous call of overridden auto-imported BIF error/2
- use erlang:error/2 or "-compile({no_auto_import,[error/2]})." to resolve name clash
{ok,a}
警告告诉你,如果你真的想调用erlang的error/2
,那么你应该在函数名之前加上定义函数的模块名,即erlang
模块:>
case X > 10 of
true -> erlang:error(bad_arg,Y]);
...或者,如果您想调用您的 error/2
版本,则输入模块指令:
-compile({no_auto_import,[error/2]}).
在模块顶部:
-module(a).
-compile(export_all).
-compile({no_auto_import,[error/2]}).
error(X,io:format("hello\n").
11> c(a).
a.erl:2: Warning: export_all flag enabled - all functions will be exported
{ok,a}
注意代码中的问题只是一个warning
,当我按照最初编写的方式运行我的程序时,erlang调用了我模块中定义的error/2
版本——而不是模块中定义的版本erlang
模块。
奇怪的是:erlang模块中没有定义error/3
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。