【问题标题】:How can I handle Account Number in erlang?如何在erlang中处理帐号?
【发布时间】:2013-05-14 11:32:27
【问题描述】:

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

那么如何实现生成并保存帐号的功能,以便下次创建帐户时将下一个帐号分配给前一个帐号?

【问题讨论】:

标签: functional-programming erlang ets


【解决方案1】:

您可以创建一个将当前号码保持在其状态的进程。要获得下一个号码,您必须向该进程发送消息,它会返回下一个号码并将其保存在其状态中。这是使用 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().

【讨论】:

    【解决方案2】:

    上述答案描述了一种非常实用的方法,使用流程来管理帐号分配。另一种不那么纯粹的功能但具有更好性能的方法是利用您说您已经在使用的 ets 框架。将下一个帐号放入 ets 表并使用ets:update_counter/3 递增/分配它。

    【讨论】:

      猜你喜欢
      • 2011-01-28
      • 1970-01-01
      • 2014-10-01
      • 2015-02-04
      • 1970-01-01
      • 1970-01-01
      • 2017-08-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多