是否有可用于在生成服务器中添加条件的选项?
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.
感谢您查看问题,如果你们能解决我的问题,那将会很有帮助和感激。现在这是我的问题..
我在 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.