产生进程时Erlang错误

时间:2010-10-11 01:15:36

标签: erlang

我按如下方式启动流程

start() ->
register (dist_erlang, spawn(?MODULE, loop, [])),
ok.

但尝试运行start()时会出现以下错误。

  

过程中的错误< 0.62.0>退出值:{undef,[{dist_erlang,loop,[]}]}

该模块名为dist_erlang。

我做错了什么?

由于

2 个答案:

答案 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).

容易被忽视