5

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ですか?

4

1 に答える 1

13

キャストを使用して返信することはできません(gen_serverドキュメントを参照)。これが、呼び出しを使用する代わりに非同期メッセージをキャストすることの全体的なポイントです。

あなたの場合、あなたは返事を返したいので、gen_server:call/2代わりに使ってください。

于 2011-04-29T12:53:30.423 に答える