进程中的 Erlang 错误,退出值为 undef

Posted

技术标签:

【中文标题】进程中的 Erlang 错误,退出值为 undef【英文标题】:Erlang error in process with exit value undef 【发布时间】:2021-12-26 17:00:20 【问题描述】:

我一直在尝试用 Erlang 编写一个简单的并发练习,其中涉及跨不同终端/shell 的通信。

但是,每次我运行 init_chat() 并输入我的名字时都会出现此错误。

=错误报告==== 2021 年 11 月 15 日::08:13:11.849169 === 节点 kei@osboxes 上的进程 出错,退出值: undef,[chat,chat_handle,"Jeano",[]]

我不知道我做错了什么。

整个程序:

-module(chat).
-compile(export_all).

init_chat() ->
    In = io:get_line("Name please: "),
    Name = string:trim(In),
    register(chat_handle, spawn(chat, chat_handle, [Name])).

chat_handle(Name) ->
    spawn(chat, message_handle, [Name]),
    receive
        message, Sender, Message ->
            io:format("~p: ~p", [Sender, Message]),
            chat_handle(Name);
        dc, Sender ->
            io:format("~p Has disconnected. ~n", [Sender]),
            chat_handle(Name);
        quit ->
            io:format("Disconnecting... ~n"),
            erlang:halt()
    end.

message_handle(Name) ->
    Message = io:get_line("You: "),
    if
        Message == "bye/n" ->
            disconnect(nodes(), Name);
        true ->
            send_message(nodes(), Name, Message)
    end.

send_message([Head | Tail], Name, Message) ->
    chat_handle, Head ! message, Name, Message,
    send_message(Tail, Name, Message);
send_message([], Name, Message) ->
    message_handle(Name).

disconnect([Head | Tail], Name) ->
    chat_handle, Head ! dc, Name,
    disconnect(Tail, Name);
disconnect([], Name) ->
    chat_handle, node() ! quit.

【问题讨论】:

我认为 Richard 可能遇到了您在这种情况下遇到的确切问题,但更普遍地介绍 Erlang 中的聊天系统真的当您是新手时非常适合探索,并且为此,您可能会发现这个系列(和相关的 repo)对探索很有用:rumble.com/ve8h9r 【参考方案1】:

错误消息显示chat,chat_handle,"Jeano", ...(字符串周围缺少列表括号),但您的代码实际上显示spawn(chat, chat_handle, [Name]),看起来正确,所以我认为您只是没有重新加载模块的重新编译版本。

【讨论】:

以上是关于进程中的 Erlang 错误,退出值为 undef的主要内容,如果未能解决你的问题,请参考以下文章

原因:在 erl 控制台 [Erlang] 中运行常见测试时 undef

在 centos 中使用 kerl 安装 erlang 时出现加密错误

Erlang消息发送和接收与多个进程

TODO:Golang Linux进程退出说明

Erlang模块supervisor翻译

[Erlang37]error/1 exit/1 exit/2 throw/1的区别