首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Erlang undef误差

Erlang undef误差
EN

Stack Overflow用户
提问于 2018-03-17 14:06:03
回答 1查看 921关注 0票数 1

下面的Erlang代码运行在Eclipse上:

代码语言:javascript
复制
%% @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.

我的操作如下:

代码语言:javascript
复制
links:start(3).

此时,我得到以下错误:

代码语言:javascript
复制
  Eshell V9.0.4
(processlinking@GAKUO)1> links:start(3).
** exception exit: undef
     in function  links:make/1
        called as links:make(2)

在运行下一个命令(即:

代码语言:javascript
复制
links:test(stop).

在这两个命令之后,我期望如下:

代码语言:javascript
复制
Process 2 received stop
Process 1 received stop
Last process now exiting
stop

经过一些研究,我发现Undef之所以会出现,是因为在计算函数调用时找不到该函数。对于类似的错误,StackOverflow的进一步研究没有帮助。解决方案涉及升级已安装的Erlang版本,但我的问题似乎是一个合乎逻辑的问题。作为二郎的新手,我无法指出这是什么。一如既往,我们将非常感谢您的帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-17 16:28:27

spawn_link (以及其他接受模块名称+函数名+参数列表的函数)只能调用该模块导出的函数。未导出的函数只能从模块内调用,需要在没有模块名称前缀的情况下调用。因此,您需要导出make/1以使该代码工作:

代码语言:javascript
复制
-export([start/1, test/1, middle/2, make/1]).
                                    ^^^^^^
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49337812

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档