首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Erlang:列出所有记录

Erlang:列出所有记录
EN

Stack Overflow用户
提问于 2014-09-14 21:21:10
回答 2查看 283关注 0票数 0

请帮帮我,(顺便说一下,我的英语不是很好)。我想列出为gen_server创建的所有记录,例如,如果有以下代码:

代码语言:javascript
复制
-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}}.

我可以打电话给:

代码语言:javascript
复制
mod:start_link(Maria,22222).
mod:start_link(Jose,9348).
mod:start_link(lol,232).

在此之后,我希望看到我创建的所有记录,并将其放在列表中。我该怎么做?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-09-15 01:41:14

您应该阅读以下文档:link-3

start_link/3只启动gen_server,存储记录数据。

代码语言:javascript
复制
-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).

你可以这样做:

代码语言:javascript
复制
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> 
票数 0
EN

Stack Overflow用户

发布于 2014-09-15 00:37:46

没有机会以这种方式获取信息:每个gen_server都有一个记录,一旦服务器死亡,信息就会丢失。如果需要此信息,则应添加一个专用进程来保存该信息({Pid,Record}或record number .)。在init和终止函数期间,可以通过如下函数更新信息: record_manager:create/1和record_manager:delete/1,还可以将它们存储在共享的ets中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25838139

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档