我按如下方式开始一个过程
start() ->
register (dist_erlang, spawn(?MODULE, loop, [])),
ok.
Run Code Online (Sandbox Code Playgroud)
但是在尝试运行start()时会出现以下错误.
进程<0.62.0>出错,退出值为:{undef,[{dist_erlang,loop,[]}]}
该模块名为dist_erlang.
我究竟做错了什么?
谢谢
Gre*_*ill 15
根据您之前的问题,您的loop函数需要一个参数,而不是none.Erlang正在寻找,loop/0但找不到它,因为你的功能是loop/1.
第三个参数spawn/3是要传递给函数的参数列表,如果您显示列表为空.尝试:
register (dist_erlang, spawn(?MODULE, loop, [[]]))
Run Code Online (Sandbox Code Playgroud)
在这种情况下,第三个参数是包含一个元素(空列表)的列表.
Jak*_* M. 11
虽然问题很老,但是当我和Erlang编译器搏斗时,我发布了帮助我的东西.
这个(不完整的)片段
-export([start/0]).
start() ->
Ping = spawn(?MODULE, ping, [[]]),
...
ping(State) ->
receive
...
end.
Run Code Online (Sandbox Code Playgroud)
失败并出错:
=ERROR REPORT==== 2-Sep-2013::12:17:46 ===
Error in process <0.166.0> with exit value: {undef,[{pingpong,ping,[[]],[]}]}
Run Code Online (Sandbox Code Playgroud)
直到你明确导出ping/1函数.所以这个出口:
-export([start/0, ping/1]).
Run Code Online (Sandbox Code Playgroud)
有用.我认为混淆来自于一些例子来自Learn You Some Erlang,以获得模块有时具有的巨大优势
-compile(export_all).
Run Code Online (Sandbox Code Playgroud)
很容易被忽视