【发布时间】:2018-08-26 12:40:49
【问题描述】:
我在 Eclipse Erlide 上运行了以下 Erlang 代码:
%% @author gakuo
%% @doc @todo Add description to links.
-module(links).
%% ====================================================================
%% API functions
%% ====================================================================
-export([start/1, test/1,middle/2]).
%% ====================================================================
%% Internal functions
%% ====================================================================
start(N)->
register(first,spawn_link(links,make,[N-1])).
make(0)->
last();
make(N)->
middle(spawn_link(links,make,[N-1]),N).
middle(Next,N)->
receive
Msg->
Next ! Msg,
io:format("Process ~w received ~w~n",[N,Msg]),
middle(Next,N)
end.
last()->
receive
stop->
io:format("last process now exiting ~n", []),
exit(finished);
Msg->
io:format("last process received ~w ~n", [Msg]),
last()
end.
test(Msg)->
first ! Msg.
我运行如下:
links:start(3).
此时,我收到以下错误:
Eshell V9.0.4
(processlinking@GAKUO)1> links:start(3).
** exception exit: undef
in function links:make/1
called as links:make(2)
这发生在我运行下一个命令之前:
links:test(stop).
在这两个命令之后,我期待以下内容:
Process 2 received stop
Process 1 received stop
Last process now exiting
stop
经过一番研究,我发现引发了 Undef 是因为在评估函数调用时找不到该函数。针对类似错误对 StackOverflow 的进一步研究没有帮助。解决方案涉及升级已安装的 Erlang 版本,但我的问题似乎是合乎逻辑的。作为 Erlang 的新手,我无法指出它是什么。像往常一样,我们将非常感谢您的帮助。
【问题讨论】:
标签: concurrency erlang