Erlang gen_server 转换错误的返回值

标签 erlang gen-server

我尝试将消息转换到 gen_server:

 gen_server:cast({global, ID}, {watchers}).

处理程序是:
handle_cast({watchers}, State) ->
    case State#table_state.watchers of
    [] ->
        {reply, no_watchers, State};
    _ ->
        {reply, State#table_state.watchers, State}
    end;

但是当我执行 gen_server:cast gen_server 因错误而终止:
=ERROR REPORT==== 29-Apr-2011::18:26:07 ===
** Generic server 1 terminating 
** Last message in was {'$gen_cast',{watchers}}
** When Server state == {table_state,1,"1",11,[]}
** Reason for termination == 
** {bad_return_value,{reply, no_watchers, {table_state,3,"3",11,[]}}}

为什么我会收到 bad_return_value ?

最佳答案

您无法使用类型转换进行回复(请参阅 gen_server documentation )。这就是转换异步消息而不是使用调用的全部意义。

如果您想返回回复,请使用 gen_server:call/2反而。

关于Erlang gen_server 转换错误的返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5832050/

相关文章:

functional-programming - 在 Erlang 中同时绑定(bind)元组及其解构元素

elixir - 使用 via 元组注册 GenServer 时遇到问题。 ** (UndefinedFunctionError) 函数 PokerServer.whereis_name/1 未定义或私有(private))

elixir - 为什么在实现 GenServer 时跟踪 #Reference 比跟踪 #PID 更好?

list - 比较两个列表是否相等的惯用方式是什么?

Erlang:supervisor(3),添加子进程

erlang - 用户断开连接时的 ejabberd 在线状态

erlang - 难以理解 Erlang Gen_Server 架构

erlang - io :fread in Erlang 的意外行为

elixir - 正常关闭GenServer

erlang - Elixir GenServer 教程中的计时错误?