2013-05-19 2 views
0

현재 ETS를 사용하여 은행 계좌 관리 시스템을 만들고 있는데 현재와 저축 계좌를 보유하고 있습니다. erlang 변수가 불변이므로 일련 번호 계좌를 생성하고 보유 할 수있는 방법을 알 수 없습니다.erlang에서 계좌 번호는 어떻게 처리합니까?

계정 번호를 생성하고 저장하는 기능을 구현하면 다음에 계정을 만들 때 다음 계정 번호를 이전 계정 번호로 할당 할 수 있습니까?

+0

이 게시물이 보이십니까 http://spawnlink.com/articles/tag/erlybank/index.html – ymn

+0

'lists','processes','mnesia','tuples', .. e.t.c를 사용해 보셨나요? 자세한 내용은 여기를 참조하십시오. http://learnyousomeerlang.com/content –

답변

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(). 
1

위의 대답은 계좌 번호 할당을 관리하는 프로세스를 사용하여 매우 기능적 접근 방식을 설명합니다. 덜 순전히 기능적이지만 성능이 좋은 또 다른 방법은 이미 사용하고있는 ets 프레임 워크를 활용하는 것입니다. 다음 계정 번호를 ets 테이블에 넣고 ets:update_counter/3으로 증가/할당하십시오.

관련 문제