【发布时间】:2011-04-23 14:38:19
【问题描述】:
我启动一个流程如下
start() ->
register (dist_erlang, spawn(?MODULE, loop, [])),
ok.
但在尝试运行 start() 时出现以下错误。
进程 出错,退出值:{undef,[{dist_erlang,loop,[]}]}
该模块名为 dist_erlang。
我做错了什么?
谢谢
【问题讨论】:
标签: erlang
我启动一个流程如下
start() ->
register (dist_erlang, spawn(?MODULE, loop, [])),
ok.
但在尝试运行 start() 时出现以下错误。
进程 出错,退出值:{undef,[{dist_erlang,loop,[]}]}
该模块名为 dist_erlang。
我做错了什么?
谢谢
【问题讨论】:
标签: erlang
虽然这个问题很老,但我发布了在我与 Erlang 编译器搏斗时对我有帮助的东西。
这个(不完整的)sn-p
-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).
容易被忽视的
【讨论】:
根据您的previous question,您的loop 函数采用一个参数,而不是没有参数。 Erlang 正在寻找 loop/0 但找不到它,因为您的函数是 loop/1。
spawn/3 的第三个参数是一个列表 要传递给您的函数的参数,如果您显示该列表为空。试试:
register (dist_erlang, spawn(?MODULE, loop, [[]]))
在这种情况下,第三个参数是一个包含一个元素的列表(一个空列表)。
【讨论】: