`
ZacMa
  • 浏览: 37563 次
  • 来自: 深圳
社区版块
存档分类
最新评论

<27>erlang record

 
阅读更多
平时总是忘记record的某些使用方法,每次使用都要翻文档, 感觉翻博客更快,所以把record使用记录下来,
例子通过ets来使用record,结合了基本的record使用方法,例子可以直接运行
1. 定义
2. 创建
3. 访问
4. 更新
5. 做guard语句
6. record的内部替代方式
7. 还可以通过统一的赋值方式,一次给多个赋值
-module(ets_test).
-compile(export_all).
-record(student, {id,name, class}).

init(Flag) ->
ets:new(?MODULE, [set, named_table, {keypos,#student.id}, public,  {write_concurrency,Flag}]).
insert(N) ->
insert1(N).
insert1(0) ->
ok;

%%  Creating Records
insert1(N) ->
R = #student{id=N,name="test"++integer_to_list(N), class=100+N},
ets:insert(?MODULE, R),
insert1(N-1).


%%  Accessing Record Fields
lookupby_id1(N) ->
case ets:lookup(?MODULE, N) of
[] ->
not_found;
[S] ->
#student{id=Id,name=Name,class=Class} = S,
{Id,Name,Class}
end.
lookupby_id2(N) ->
case ets:lookup(?MODULE, N) of
[] ->
not_found;
[S] ->
S
end.

%%  Accessing Record Fields
lookupby_id3(N) ->
case ets:lookup(?MODULE, N) of
[] ->
not_found;
[#student{id=Id}=S] ->
Id
end.
%%  Accessing Record Fields
lookupby_id4(N) ->
AllS = ets:match(?MODULE, '$1'),
AllS2=lists:append(AllS),
lists:keysearch(N,#student.id,AllS2).

lookupby_id5(Name) ->
AllS = ets:match(?MODULE, '$1'),
AllS2=lists:append(AllS),
lists:keysearch(Name,#student.name,AllS2).

lookupby_id41(N) ->
case ets:lookup(?MODULE, N) of
[] ->
not_found;
[R] ->
R#student.id
end.

%% Updating Records
update(N) ->
case ets:lookup(?MODULE, N) of
[] ->
not_found;
[S] ->
R=S#student{name="sssssssss"},
ets:insert(?MODULE, S)
end.

%% Records in Guards

lookup6(N) ->
case ets:lookup6(?MODULE, N) of
[] ->
not_found;
[R] when R==#student{id=2,name="test2",class=102} ->
R;
_ ->
not_this_record
end.

test7() ->
record_info(fields, student).

test8() ->
record_info(size, student).

%% result is "true"
test9() ->
case ets:lookup(?MODULE, 10) of
[] ->
not_found;
[S] ->
io:format("S=~p~n",[S]),
S == {student, 10,"test10", 110}
end.
分享到:
评论

相关推荐

    Erlang中的Record详解

    主要介绍了Erlang中的Record详解,本文讲解了定义Record、创建Record、访问Record、更新Record、匹配Record和Guard语句、使用Record等内容,需要的朋友可以参考下

    erlang日志应用log4erl(非sasl)

    Please send your suggestion to ahmed.nawras &lt;at @ at&gt; gmail &lt;dot . dot&gt; com 8. LICENSE: =========== This software is subject to "Mozilla Public License 1.1". You can find the license terms in the ...

    erlang-task-queue:Erlang 任务队列行为

    Erlang 任务队列行为模块示例: -module(bruteforce_worker).-behaviour(task_queue).-export([ init/1, process_task/2, terminate/2, code_change/3 ]).-record(state, {}).init(_Args) -&gt; #state{}.process_task...

    erlang_protobuffs

    主要看readme,里面详细讲解了如何解析消息的定义格式,生成相应的record。

    erl_aliases:为 Erlang 记录和模块名称定义(较短的)别名

    概述 erl_aliases是一个 Erlang 解析转换库,它提供了一个简单直接的接口,用于为(较长)记录和模块名称定义(较短)别名。 定义后,可以使用别名代替原始名称。 基本原理 ... - record ( long_recor

    Eralng Maps设计原由

    Erlang Maps设计原由。17版后,还是需要多了解这个maps的。

    Erlang中的基本元素操作小结

    主要介绍了Erlang中的基本元素操作小结,本文讲解了元组(tuple)、记录(record)、列表(list)、映射组(map)等内容,需要的朋友可以参考下

    emysql:Erlang MySQL驱动程序

    该叉子将不再维护。 积极的发展已移至: 用法启动应用程序 application:start(emysql).新增游泳池emysql:add_pool(PoolName,PoolSize,用户名,密码,主机,端口,数据库,...记录类型 -record(ok_packet, {seq_nu

    erlang mnesia 数据库基本查询

    Mnesia是一个分布式数据库管理系统,适合于电信和其它需要持续运行和具备软实时特性的Erlang应用,越来越受关注和使用,但是目前Mnesia资料却不多,很多都只有官方的用户指南。下面的内容将着重说明 如何做 Mnesia ...

    jeson:用于erlang的JSON序列化器

    #杰森安装make sudo make install杰森模块功能jeson:gen_decoder(Type_list, Field_name, Record_name) :生成将json字符串转换为erlang记录的函数。 必须指定记录的结构以生成函数: Type_list是记录中每个字段的...

    Mnesia User's Guide

    Examples are included how to start an Erlang session, specify a Mnesia database directory, initialize a database schema, start Mnesia, and create tables. Initial prototyping of record definitions is ...

    httpc::satellite_antenna:向HTTP服务器发出请求

    绑定到Erlang的内置HTTP客户端httpc 。 import gleam / httpc import gleam / http.{Get} import gleam / should pub fn main () { // Prepare a HTTP request record let req = http. default_req () | &gt; ...

    forecast:predict.io 包装器

    从外壳使用 $ make$ make run...% Optionally load record def1&gt; rr("include/forecast.hrl").2&gt; forecast:start().3&gt; forecast:get({{lat, 60.173324}, {long, 24.941025}}). 从您自己的项目中使用将forecast添加到...

    slg-csv:处理游戏服务器中csv文件到ets表的映射

    slg_csv提供csv文件到ets...csv_record首先定义以下宏,下面会使用该宏-define(csv_record(Name), {Name, record_info(fields, Name)}).简单映射定义record为:%% vip经验配置,默认为0级.-record(gd_vip_exp, { level,

    statman_graphite:将状态从statman推送到石墨主机

    Statman-&gt;石墨 该库将通过收集的指标通过TCP推送到石墨主机。 对于statman直方图,仅将百分位作为数据点推送到石墨。 使用它 在启动应用程序之前,您需要设置host和port应用程序变量。 之后,您只需要使用statman...

    ebunny_pool:一个rabbitmq工作池

    ebunny_pool 这是一个简单的库,允许您实现 worker。 它将自动声明所需的交换和队列,并为其创建一个 ,因此可以在指定的时间间隔后重试失败的任务...- record ( state , {}). init ( Options ) -&gt; { ok , # state {

Global site tag (gtag.js) - Google Analytics