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编程 Introducing Erlang,作者Simon.St.Laurent
erlang 安装包
ErlangB和ErlangC计算工具(exe可执行文件+excel两个) ErlangB和ErlangC计算工具(exe可执行文件+excel两个)
Erlang及其应用Erlang及其应用Erlang及其应用
erlang otp25 win安装包
erlang25.0 windows版本
erlang22最新下载包 erlang22.1.tar.gz erlang22最新下载包 erlang22最新下载包
Erlang并发编程,Erlang程序设计,Erlang中文手册。 学习erlang的好资料。 Erlang是一个结构化,动态类型编程语言,内建并行计算支持。最初是由爱立信专门为通信应用设计的,比如控制交换机或者变换协议等,因此...
RabbitMQ version Minimum required Erlang/OTP Maximum supported Erlang/OTP Notes 3.13.0 26.0 26.2.x The 3.13 release series is compatible wtih Erlang 26. OpenSSL 3 support in Erlang is considered to ...
NULL 博文链接:https://erlangdisplay.iteye.com/blog/315483
erlang 中文基础教程erlang 中文基础教程
esl-erlang_23.0和rabbitmq-3.8.4windows版本 直接下载安装就行,可以直接下载就可安装,非常的方便 ,欢迎大家下载 注意事项: 1. Erlang版本和RabbitMQ版本要配套 (Erlang23.0, RabbitMQ3.8.4) 2. amd芯片请乖乖...
erlang文献及资料汇总 入门资料: erlang中文手册(R11B 文档译文,最适合入门) erlang位运算与二进制解析 erlang二进制高效编程 erlang异常处理详解 开发经验: 面对软件错误构建可靠的分布式系统 编写分布式的 ...
erlang安装包
erlang资源,非常值得下载,二郎学习
Erlang特性: ● 并发性 - Erlang支持超大量级的并发进程,并且不需要操作系统具有并发机制。 ● 分布式 - 一个分布式Erlang系统是多个Erlang节点组成的网络(通常每个处理器被作为一个节点) ● 健壮性 - Erlang...
This package contains the Erlang/OTP runtime implementation, which is configured and built with HiPE support (allows compiling to native code), and minimal set of Erlang applications: compiler - ...