Module的Attribute形式如下:
-Attr(Value).
其中Attr为atom,Value可以为任何直接的term。
Attribute包含预定义的Attributes以及用户自定义的Attributes。
预定义模块Attribute(Pre-Defined Module Attributes):
-module(Module)
名为Module的模块声明,Module为atom,Module必须与此文件文件名相同(除去.erl后缀名,比如module1.erl,则Module为module1)
-export(Functions)
说明本模块导出的函数列表,Functions形式如下[Function1/Artiy1, ..., FunctionN/ArityN],其中FunctionN为atom,ArtityN为integer
-import(Module, Functions)
引入某个模块的函数列表,这样使用Module的函数时,可以像使用本地函数一样,不用指定模块前缀。Functions与export中的 Functions相同,Module为atom。推荐不要使用import,因为容易混淆,而且影响代码自动更新。(这里类似C++中的using namespace std; 这样以后使用stl相关的函数,类时不用添加std::前缀)
-compile(Options)
指定编译选项,具体参考compile文档。在我们写代码时,经常使用-compile(export_all),将本模块中的所有函数导出,这里仅是为了测试代码方便,在最后的产品中,应该尽力减少每个模块导出的函数。
-vsn(Vsn)
模块的版本信息,Vsn为一个字面信息,可以为任何Term。可以通过beam_lib:version/1获取,如果没有指定vsn则默认为Module的checksum
注意:-record,-macro不时模块的属性,尽管它们很像。
用户自定义Attributes(User-Defined Attributes):
-SomeTag(Value)
SomeTag为atom,Value为任何具有直接字面意义的Term。
Attribute的获取
Module的Attributes信息,会在Module被编译的时候添加到beam文件中。因此可以通过 Module:module_info()获取Moudle的整体信息,也可以通过Module:module_info(attributes)获取所有用户自定义的属性信息。也可以通过:beam_lib:chunks("module.beam", [attributes])获取所有用户自定义的属性信息。
让我们写一小段代码,用来方便获取某个属性:
-module(extract).
-export([attribute/2]).
attribute(File, Key) ->
case beam_lib:chunks(File, [attributes]) of
{ok, {_Module, [{attributes, L}]}} ->
case lookup(Key, Key) of
{ok, Value} ->
Value;
error ->
exit(badAttribute)
end;
_ ->
exit(badFile) end.
lookup(Key, [{Key, Val} | _Tail]) -> Val;
lookup(Key, [_H | Tail]) -> lookup(Key, Tail);
lookup(Key, []) -> error.
Update:现在我们已经不需要这个函数了,在R12B中,每个Module自动引入了一个module_info函数,我们可以通过其获取Module的各种属性
分享到:
相关推荐
### Erlang中的Module级别热部署 #### 一、引言 Erlang 是一种专为构建高并发、容错性强的分布式系统而设计的编程语言。它的独特之处在于支持轻量级进程(也称为协程)和热部署能力。本文将深入探讨Erlang 中的 ...
**Erlang编程:Introducing Erlang** Erlang是一种函数式编程语言,由爱立信在1986年开发,主要用于构建高可用性、容错性和并发性的分布式系统。"Introducing Erlang"是Simon St. Laurent撰写的一本入门级教程,...
Erlang是一种面向并发的、函数式编程语言,由瑞典电信设备制造商Ericsson开发,主要用于构建高可用性、分布式和实时系统。版本24.3.4.4是Erlang的一个更新版本,包含了对先前版本的改进和修复。Erlang以其强大的错误...
Erlang是一种高级编程语言,特别适用于并发、分布式和实时系统。它由Ericsson公司开发,主要用于构建高可用性、容错性和可扩展性的软实时系统。Erlang的25.0版本是该语言的一个更新,针对Windows操作系统进行了优化...
Erlang是一种面向并发、分布式计算的编程语言,它的源代码是组织在模块(module)中的。模块是Erlang程序的基本单位,包含了特性(attribute)和函数(function)声明。下面将详细介绍Erlang模块的规则、特性、...
Erlang LRU Cache 模块是一个用于实现Least Recently Used(最近最少使用)缓存策略的工具。LRU缓存是一种常见的数据结构,它在内存有限的情况下,通过淘汰最近最少使用的数据来保持缓存的容量。在Erlang中,这个...
Erlang是一种面向并发的、函数式编程语言,由瑞典电信设备制造商Ericsson为了实现分布式实时、高可靠性系统而开发。Erlang以其强大的并行处理能力、容错性和易于构建大规模分布式系统的特点,在电信、金融和互联网等...
这个“erlang资源”包含两本PDF书籍——《Erlang并发编程》和《Erlang入门手册》,它们是深入理解和学习Erlang语言的关键资料。 《Erlang并发编程》这本书可能涵盖了以下知识点: 1. **并发模型**:Erlang的并发...
Erlang/OTP 26.2.1,Erlang,OTP,26.2.1
Erlang B和Erlang C是电信领域中两种重要的流量模型,用于预测和分析通信系统中的呼叫处理能力和拥塞情况。这两个模型由丹麦工程师Agner Krarup Erlang在20世纪初提出,至今仍广泛应用于现代通信网络的设计与优化。 ...
Erlang是一种面向并发的、函数式编程语言,主要用于构建高度可扩展的、容错性强的分布式系统。在IT行业中,Erlang因其强大的实时性和处理大量并发连接的能力而被广泛应用于电信、互联网基础设施和实时系统。RabbitMQ...
Erlang是一种面向并发的、函数式编程语言,由瑞典电信设备制造商Ericsson于1986年开发,主要用于构建高可用性、分布式系统。Erlang的设计目标是支持大量并发连接,容错性强,易于编写实时系统。Erlang采用actor模型...
Erlang是一种面向并发的、函数式编程语言,主要用于构建高度可扩展的、容错性强的分布式系统。在IT行业中,Erlang因其强大的实时性、并发性和内存管理机制而被广泛应用于网络通信、数据库系统以及消息中间件,如...
在Erlang Shell中,使用`c(module_name).`命令编译指定的模块,如`c(tut).`。若编译成功,会返回`{ok,module_name}`的信息;若编译失败,系统会给出错误报告,帮助开发者定位并修正问题。 通过以上介绍,我们可以...
【Erlang编程语言及其应用】 Erlang是一种并发式、函数式的编程语言,由瑞典电信设备制造商Ericsson开发,最初用于构建高可用性、容错性和可扩展性的分布式系统。"xiandiao_erlang_Erlang课后习题_"这个压缩包文件...
Erlang是一种面向并发的、函数式编程语言,由瑞典电信设备制造商Ericsson开发,用于构建高可用性、分布式和实时系统。Erlang因其在处理大量并发连接和容错能力上的优秀表现,广泛应用于电信、银行、互联网服务等领域...
Erlang B公式是通信网络领域中用于计算呼叫阻塞概率的重要工具,它在电路交换系统,特别是电话交换网络的设计中发挥着关键作用。这个压缩包包含了一个基于Erlang B公式的计算器程序,以及其源代码和实验报告,旨在...
Erlang是一种高级编程语言,特别适用于并发、分布式和实时计算系统。它的设计目标是创建一个高可用性、容错性强、低延迟的系统。Erlang9指的是Erlang/OTP(Open Telephony Platform)的第9个主要版本。OTP是Erlang...