【发布时间】: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
标签: erlang