我按如下方式启动流程
start() ->
register (dist_erlang, spawn(?MODULE, loop, [])),
ok.
但尝试运行start()时会出现以下错误。
过程中的错误< 0.62.0>退出值:{undef,[{dist_erlang,loop,[]}]}
该模块名为dist_erlang。
我做错了什么?
由于
答案 0 :(得分:16)
根据您的previous question,您的loop
函数需要一个参数,而不是一个参数。 Erlang正在寻找loop/0
但找不到它,因为您的函数是loop/1
。
spawn/3
的第三个参数是传递给您的函数的参数的列表,如果您显示该列表为空。尝试:
register (dist_erlang, spawn(?MODULE, loop, [[]]))
在这种情况下,第三个参数是包含一个元素(空列表)的列表。
答案 1 :(得分:12)
虽然这个问题很老,但是当我和Erlang编译器搏斗时,我发布了帮助我的内容。
此(不完整)代码段
-export([start/0]).
start() ->
Ping = spawn(?MODULE, ping, [[]]),
...
ping(State) ->
receive
...
end.
失败并显示错误:
=ERROR REPORT==== 2-Sep-2013::12:17:46 ===
Error in process <0.166.0> with exit value: {undef,[{pingpong,ping,[[]],[]}]}
直到您明确导出ping/1
函数。所以这个出口:
-export([start/0, ping/1]).
它有效。我认为混淆来自Learn You Some Erlang for great good的一些例子,其中模块有时会有
-compile(export_all).
容易被忽视