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

<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 test 生成 dets

    [] -&gt; io:fwrite("Record not found~n") end. ``` 4. **更新数据**:如果需要更新已存在的记录,可以先使用`dets:lookup/2`找到记录,然后创建一个新的记录并使用`dets:insert/2`替换原有记录: ```erlang New...

    Erlang保留字

    -record(Name, {key1 = Default, key2 = Default}). ``` 这里定义了一个名为`Name`的记录,它有两个字段`key1`和`key2`,默认值均为`Default`。 - **记录操作**:记录可以通过多种方式进行操作,包括创建、更新...

    erlang_protobuffs

    1. **Record支持**:Erlang Protobuffs生成的代码通常使用Erlang的record机制,使消息处理更直观。 2. **效率**:由于协议缓冲区的紧凑格式,它们在处理大量数据时比JSON或XML更高效。 3. **兼容性**:Erlang ...

    erlang 参考手册 模块部分--自己翻译的中文版

    Erlang是一种面向并发、分布式计算的编程语言,它的源代码是组织在模块(module)中的。模块是Erlang程序的基本单位,包含了特性(attribute)和函数(function)声明。下面将详细介绍Erlang模块的规则、特性、...

    Erlang程序设计中文版(完整书签).pdf

    8. 语法和基本概念:Erlang有独特的语法,包括模块(module)、函数(function)、元组(tuple)、列表(list)、记录(record)等数据类型和构造。掌握基本语法是使用Erlang进行开发的基础。 由于文件描述中提到...

    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中文手册

    - **函数定义**: 函数定义的基本格式为 `function_name(arguments) -&gt; expression.`。 - **多条目函数**: 一个函数可以有多个入口点(clauses),根据传入的不同参数执行不同的代码路径。 - **元子 (Atoms)**: -...

    Erlang的OOP功能

    -record(person, {name, age}). ``` 这个记录定义了一个名为`person`的类型,包含两个字段:`name`和`age`。 **2. 继承与多态** Erlang不直接支持类和继承的概念,但它可以通过模式匹配和行为(behaviours)来实现...

    Erlang 速查表 v1.0.pdf

    Erlang是一种用于构建并发、分布和容错系统的编程语言和运行时环境。Erlang拥有一个独特的语法和一套内置的数据类型,以及专门为并发编程设计的库。下面将详细介绍Erlang速查表中提到的一些关键知识点。 ### 变量和...

    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 Reference Manual

    **1.2.12 记录(Record)** 记录是一种具有命名字段的数据结构,用于表示具有固定字段集的对象。手册中详细介绍了记录的定义方法、访问方式以及更新记录字段的方法。 **1.2.13 布尔(Boolean)** 布尔类型表示逻辑值 ...

    Erlang中的基本元素操作小结

    本文详细介绍了Erlang中的基本元素操作,包括元组(tuple)、记录(record)、列表(list)和映射组(map)等。 首先来看元组(tuple)。元组是将固定数量的元素组合成一个单一实体的数据结构,它的一般形式是用大括号{}括...

    Eralng Maps设计原由

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

    特里:Erlang特里实现

    在Erlang中实现特里树,我们可以定义一个记录(record)来表示节点,包括字符、子节点列表和是否为叶节点的标志。例如: ```erlang -record(trie_node, {char :: char(), children :: dict(), is_leaf :: boolean()...

    emysql:Erlang MySQL驱动程序

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

Global site tag (gtag.js) - Google Analytics