请帮帮我,(顺便说一下,我的英语不是很好)。我想列出为gen_server创建的所有记录,例如,如果有以下代码:
-module(mod).
-record(person, {name, phone}).
start_link(Param1, Param2) ->
gen_server:start_link(?MODULE, [Param1, Param2], []).
init([Param1, Param2]) ->
{ok, #person{name=Param1,phone=Param2}}.我可以打电话给:
mod:start_link(Maria,22222).
mod:start_link(Jose,9348).
mod:start_link(lol,232).在此之后,我希望看到我创建的所有记录,并将其放在列表中。我该怎么做?
发布于 2014-09-15 01:41:14
您应该阅读以下文档:link-3。
start_link/3只启动gen_server,存储记录数据。
-module(record_make).
-compile(export_all).
-export([init/1, handle_call/3, handle_cast/2, handle_info/2, terminate/2, code_change/3]).
-behaviour(gen_server).
-define(SERVER, ?MODULE).
-record(state, {persons = []}).
-record(person, {name, phone}).
start_link() ->
gen_server:start_link({local, ?SERVER}, ?MODULE, [], []).
init([]) ->
{ok, #state{}}.
handle_call({create, Name, Phone}, _Frome, State = #state{persons = Persons}) ->
NewPerson = #person{name = Name, phone = Phone},
{reply, ok, State#state{persons = [NewPerson | Persons]}};
handle_call(list, _From, State = #state{persons = Persons}) ->
io:format("~p~n", [Persons]),
{reply, ok, State};
handle_call(_Request, _From, State) ->
Reply = ok,
{reply, Reply, State}.
handle_cast(_Msg, State) ->
{noreply, State}.
handle_info(_Info, State) ->
{noreply, State}.
terminate(_Reason, _State) ->
ok.
code_change(_OldVsn, State, _Extra) ->
{ok, State}.
create(Name, Phone) ->
gen_server:call(?MODULE, {create, Name, Phone}).
list() ->
gen_server:call(?MODULE, list).你可以这样做:
1> c(record_make)
1> .
{ok,record_make}
2> record_make:start_link().
{ok,<0.41.0>}
3> record_make:create("yang", "123").
ok
4> record_make:create("zhang", "456").
ok
5> record_make:list().
[{person,"zhang","456"},{person,"yang","123"}]
ok
6> 发布于 2014-09-15 00:37:46
没有机会以这种方式获取信息:每个gen_server都有一个记录,一旦服务器死亡,信息就会丢失。如果需要此信息,则应添加一个专用进程来保存该信息({Pid,Record}或record number .)。在init和终止函数期间,可以通过如下函数更新信息: record_manager:create/1和record_manager:delete/1,还可以将它们存储在共享的ets中。
https://stackoverflow.com/questions/25838139
复制相似问题