我如何在erlang中处理账号?



我正在使用ETS制作银行账户管理系统,该系统也将持有活期和储蓄账户,我无法弄清楚如何生成和保留一系列账户号码,因为erlang变量是不可变的。

那么我如何实现一个函数来生成和保存账号,以便下次创建账户时,它将下一个账号分配给前一个账号?

您可以创建一个进程,该进程将保持当前数字的状态。要获得下一个号码,你必须向该进程发送消息,它返回下一个号码,并将其保存在其状态。这是一个使用gen_server:

实现的示例
-module(acc_number).
-behavior(gen_server).
-export([start_link/0, get_number/0]).
-export([init/1, handle_call/3]).
-define(SERVER, ?MODULE).
-record(state, {number}).
start_link() ->
    gen_server:start_link({local, ?SERVER}, ?MODULE, [], []).
get_number() ->
    gen_server:call(?SERVER, get_number).
init([]) ->
    {ok, #state{number = 0}}.
handle_call(get_number, _From, #state{number = Number}) ->
    NextNumber = Number + 1,
    {reply, NextNumber, #state{number = NextNumber}}.

注意:在示例中,我只实现了那些用于解决任务的回调。你必须实现gen_server的所有回调。

要获得下一个数字,你可以这样做:

acc_number:start_link().
AccountNumber = acc_number:get_number().

上面的答案描述了一种非常实用的方法,使用流程来管理帐号分配。另一种方法是利用您所说的已经在使用的ets框架,这种方法不太纯粹是功能性的,但性能更好。3.

将下一个帐号放入一个ets表中,并使用ets:update_counter/递增/赋值。

相关内容

  • 没有找到相关文章

最新更新