- 浏览: 39095 次
- 来自: 深圳
文章分类
最新评论
-
ZacMa:
哈哈,突然感觉里面没怎么介绍,全是贴代码了
<8>redis及erl-redis阅读 -
惊涛翻案:
马博士,给我开课吧
<8>redis及erl-redis阅读
平时总是忘记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.
例子通过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.
- ets_test.rar (1.8 KB)
- 下载次数: 0
发表评论
-
erlang版本安装相关问题 <32>
2014-05-10 15:54 627<1> erlang R1603安装后,crytp ... -
关于iolist<30>
2014-01-15 10:42 630iolist是比较常用的数据结构. iolist的 ... -
erlang 字符编码 <29>
2014-01-14 16:31 1264用mochiweb通过网页发送中文到服务器,结果服务器显示乱码 ... -
<26>io:format io_lib:format
2013-11-14 11:07 1318使用io_lib时候要注意参数,尤其是封装json串的时候,否 ... -
<24>用error_logger间隔记录日志
2013-10-22 16:09 654执行下面的代码 test:start(). test.erl ... -
<23>erlang 数据存储
2013-10-15 22:15 1664做为后端开发者,经常 ... -
<22> erlang中的数学计算函数相关
2013-10-10 10:34 16351. 幂函数 match:pow(m,n) 表示m的n次幂 ... -
<20>erlang中的类型和函数说明
2013-09-15 11:25 984erlang是一种动态类型的语言(运行时才决定数据类型),可以 ... -
<19>erlang中的时间,日期
2013-09-06 11:21 1198时间函数涉及的数据类型: DATA TYPES datetim ... -
<18>Efficient guide 之List handling
2013-08-31 18:45 6791 Deep and flat lists lists:fl ... -
<17>Efficiency Guide之Function
2013-08-27 22:30 5811. 函数模式匹配 模式匹配,在函数头,case和receiv ... -
<16>Efficiency Guide之Common Caveats
2013-08-11 11:07 814(1) ++ 如果做一个list的反转,不要这样, naiv ... -
<15> lists模块补充
2013-08-05 20:12 830%% 对list模块经常用到的进行补充 %% 1 对所有元素进 ... -
<15> lists模块解析和补充
2013-07-24 17:57 12%% 对list模块经常用到的进行补充 %% 1 对所有元素 ... -
<12>简述erlang的几种错误
2013-04-14 23:31 11851) badarg Bad argument. The ar ... -
<11>erlang中方便使用的模块和命令(2)
2013-04-06 22:33 802(1) 进程字典到底用不用,很多人推荐使用 http:// ... -
<9>rabbitmq网络层
2013-01-31 00:20 818抽离出了网络层, 逻辑层待以后研究 https://gith ... -
<8>redis及erl-redis阅读
2013-01-16 10:14 8551 redis的功能相当的强大,里面的发布订阅pub/su ... -
<7>pg2 分析
2012-12-08 13:42 1260网上看到erlang的pg2模块似乎没人推荐使用,但是还是有不 ... -
<6>error_logger 使用
2012-12-02 16:24 1455erlang中日志管理主要有error_loggger 模块, ...
相关推荐
主要介绍了Erlang中的Record详解,本文讲解了定义Record、创建Record、访问Record、更新Record、匹配Record和Guard语句、使用Record等内容,需要的朋友可以参考下
[] -> io:fwrite("Record not found~n") end. ``` 4. **更新数据**:如果需要更新已存在的记录,可以先使用`dets:lookup/2`找到记录,然后创建一个新的记录并使用`dets:insert/2`替换原有记录: ```erlang New...
-record(Name, {key1 = Default, key2 = Default}). ``` 这里定义了一个名为`Name`的记录,它有两个字段`key1`和`key2`,默认值均为`Default`。 - **记录操作**:记录可以通过多种方式进行操作,包括创建、更新...
1. **Record支持**:Erlang Protobuffs生成的代码通常使用Erlang的record机制,使消息处理更直观。 2. **效率**:由于协议缓冲区的紧凑格式,它们在处理大量数据时比JSON或XML更高效。 3. **兼容性**:Erlang ...
Erlang是一种面向并发、分布式计算的编程语言,它的源代码是组织在模块(module)中的。模块是Erlang程序的基本单位,包含了特性(attribute)和函数(function)声明。下面将详细介绍Erlang模块的规则、特性、...
8. 语法和基本概念:Erlang有独特的语法,包括模块(module)、函数(function)、元组(tuple)、列表(list)、记录(record)等数据类型和构造。掌握基本语法是使用Erlang进行开发的基础。 由于文件描述中提到...
Please send your suggestion to ahmed.nawras <at @ at> gmail <dot . dot> com 8. LICENSE: =========== This software is subject to "Mozilla Public License 1.1". You can find the license terms in the ...
- **函数定义**: 函数定义的基本格式为 `function_name(arguments) -> expression.`。 - **多条目函数**: 一个函数可以有多个入口点(clauses),根据传入的不同参数执行不同的代码路径。 - **元子 (Atoms)**: -...
-record(person, {name, age}). ``` 这个记录定义了一个名为`person`的类型,包含两个字段:`name`和`age`。 **2. 继承与多态** Erlang不直接支持类和继承的概念,但它可以通过模式匹配和行为(behaviours)来实现...
Erlang是一种用于构建并发、分布和容错系统的编程语言和运行时环境。Erlang拥有一个独特的语法和一套内置的数据类型,以及专门为并发编程设计的库。下面将详细介绍Erlang速查表中提到的一些关键知识点。 ### 变量和...
Erlang 任务队列行为模块示例: -module(bruteforce_worker).-behaviour(task_queue).-export([ init/1, process_task/2, terminate/2, code_change/3 ]).-record(state, {}).init(_Args) -> #state{}.process_task...
**1.2.12 记录(Record)** 记录是一种具有命名字段的数据结构,用于表示具有固定字段集的对象。手册中详细介绍了记录的定义方法、访问方式以及更新记录字段的方法。 **1.2.13 布尔(Boolean)** 布尔类型表示逻辑值 ...
本文详细介绍了Erlang中的基本元素操作,包括元组(tuple)、记录(record)、列表(list)和映射组(map)等。 首先来看元组(tuple)。元组是将固定数量的元素组合成一个单一实体的数据结构,它的一般形式是用大括号{}括...
Erlang Maps设计原由。17版后,还是需要多了解这个maps的。
在Erlang中实现特里树,我们可以定义一个记录(record)来表示节点,包括字符、子节点列表和是否为叶节点的标志。例如: ```erlang -record(trie_node, {char :: char(), children :: dict(), is_leaf :: boolean()...
该叉子将不再维护。 积极的发展已移至: 用法启动应用程序 application:start(emysql).新增游泳池emysql:add_pool(PoolName,PoolSize,用户名,密码,主机,端口,数据库,...记录类型 -record(ok_packet, {seq_nu