Functional programming 我如何处理erlang中的帐号?

Functional programming 我如何处理erlang中的帐号?,functional-programming,erlang,ets,Functional Programming,Erlang,Ets,我正在使用ETS制作银行账户管理系统,ETS也将持有活期和储蓄账户,我无法理解如何生成和保留账户编号序列,因为erlang变量是不可变的 那么,如何实现生成和保存帐号的功能,以便下次创建帐号时,它会将下一个帐号分配给上一个帐号?您可以创建一个流程,使当前帐号保持其状态。要获得下一个号码,您必须向该进程发送消息,该进程返回下一个号码并将其保存在其状态。这是gen_server实现的一个示例: -module(acc_number). -behavior(gen_server). -export(

我正在使用ETS制作银行账户管理系统,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框架,这种方法不太纯粹是功能性的,但性能更好。将下一个帐号放入ets表中,并用递增/分配。

你看到这篇文章了吗?你是否尝试过使用
列表
进程
mnesia
元组
,…e.t.c。请参阅此处的更多信息: