【问题标题】:Erlang error when spawning a process生成进程时出现 Erlang 错误
【发布时间】:2011-04-23 14:38:19
【问题描述】:

我启动一个流程如下

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

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

进程 出错,退出值:{undef,[{dist_erlang,loop,[]}]}

该模块名为 dist_erlang。

我做错了什么?

谢谢

【问题讨论】:

    标签: erlang


    【解决方案1】:

    虽然这个问题很老,但我发布了在我与 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).
    

    容易被忽视的

    【讨论】:

    • 干杯!这解决了我遇到的确切问题。 :) 我觉得很奇怪你必须导出一个你打算在本地使用的函数(通过 spawn)。
    【解决方案2】:

    根据您的previous question,您的loop 函数采用一个参数,而不是没有参数。 Erlang 正在寻找 loop/0 但找不到它,因为您的函数是 loop/1

    spawn/3 的第三个参数是一个列表 要传递给您的函数的参数,如果您显示该列表为空。试试:

    register (dist_erlang, spawn(?MODULE, loop, [[]]))
    

    在这种情况下,第三个参数是一个包含一个元素的列表(一个空列表)。

    【讨论】:

      猜你喜欢
      • 2015-11-15
      • 2012-09-23
      • 1970-01-01
      • 2016-06-21
      • 2016-07-24
      • 2016-02-16
      • 2021-07-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多