产生进程时Erlang错误

jar*_*ryd 10 erlang

我按如下方式开始一个过程

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)

很容易被忽视

  • 干杯! 这解决了我遇到的确切问题.:)我发现你必须导出一个你打算在本地使用的函数(通过spawn),这很奇怪. (2认同)