是否有可用于在生成服务器中添加条件的选项?

Is there an option available for adding conditions in gen server?

感谢您查看问题,如果你们能解决我的问题,那将会很有帮助和感激。现在这是我的问题..

我在 erlang 中创建了一个 gen 服务器用于银行业务,我只是将其用于存款和取款。它工作得很好,我现在需要的是为提款添加条件。例如,如果要提取的金额要使余额低于 100,则必须中止提取,并显示“最小余额为 100”等信息。我是自学的,这是出于我对生成服务器如何处理条件的好奇心。这是撤回发生的部分。

deallocate(Available,M) ->
    New_state1 = Available - M,
    io:format("Amount withdrawn : ~p~n",[M]),
    io:format("Total Balance : ~p~n",[New_state1]),
    Reply = withdrawn,
    {New_state1,Reply}.

从上面几行可以看出,这里就是提款完成的地方。现在我被困在这里以及我可以在哪里以及如何添加条件。

非常感谢任何帮助,并提前感谢您的尝试。美好的一天!!

我假设您是从 handle_call/3 中调用此 deallocate/2 函数,并且将回复返回给调用者,例如...

handle_call({deallocate, M}, _From, State) ->
    {NewState, Reply} = deallocate(State, M),
    {reply, Reply, NewState};
…

如果是这种情况,您只需要 return 向客户端发送一条错误消息,而不是 withdrawn

deallocate(Available,M) ->
    case Available - M of
        NewState when NewState < 100 ->
            {Available, {error, balance_under_minimum}};
        NewState ->
            io:format("Amount withdrawn : ~p~n",[M]),
            io:format("Total Balance : ~p~n",[NewState]),
            {NewState, withdrawn}
    end.

当然,在客户端,您必须理解错误信息,所以不要……

deallocate(M) -> gen_server:call(the_bank, {deallocate, M}).

……你会……

deallocate(M) ->
    case gen_server:call(the_bank, {deallocate, M}) of
        withdrawn -> withdrawn;
        {error, balance_under_minimum} ->
            io:format("Minimum balance is 100\n"),
            not_withdrawn
    end.