erlang的一些知识点补充


apply

语法:apply(Mod,Func,[Arg1,Arg2,…,ArgN])
用处:使得Mod,Func可以作为参数传入。
建议:尽量不使用,因为使用之后很多分析个工具无法使用。

元数

定义: 函数的参数个数
两个名称相同,元数不同的函数是完全不同的函数。

属性

语法: -AtomTag(…)
注意: -record(…) , -include(…) 不算模块属性

分两类:
预定义型

  • -module(modname) : modname必须是原子,且为文件名。
  • -import(Mod,[Name1/Arity1,Name2/Arity2,…]). 声明导入Mod模块中的函数,之后调用不需要模块名。
  • -export([Name1/Arity1,Name2/Arity2,…]). 导出函数声明。
  • -compile(Opetions).
  • -vsn(Version). 制定模块版本号。

用户定义型

  • 格式: -SomeTag(Value).
  • SomeTag必须是原子
  • Value必须是字面数据类型。
  • 每个模块中都会自动添加两个函数
  • Mod: module_info().
  • Mod: module_info(X).

块表达式

使用: 语法要求单个表达式,但是想使用多个。比如列表推导 [ E || … ] E是单个表达式。

格式:
begin
Expr1
…,
ExprX
end

动态代码载入

a模块运行b模块,如果b在运行过程中重新编译或改动了,a会在下一次调用时,调用最新的版本。

如果a模块被改变或重新编译了,那么Erlang虚拟机中有两个a的不同版本同时运行:当前版和旧版。如果继续改变 a,那么当前版变为旧版,重新编译后的移为当前版。

函数引用

目的:想要引用当前或外部模块里定义的某个函数。
格式:
fun LocalFunc/Arity 引用当前模块中的函数。
fun Mod:RemoteFunc/Arity 引用外部模块中的函数。

包含文件

包含的文件必须是 .hrl
-include(Filename).
-include_lib(Name).

列表操作

++ : [1,2,3]++[4,5,6] 为 [1,2,3,4,5,6]
– :
例子:
[a,b,c,1,d,1] – [1] 为 [a,b,c,d,1]
[a,b,c,1,d,1] – [1,1] 为 [a,b,c,d]

注意,如果符号X在B中值出现了K次,那么A值会移除K个X。

格式:
-define (Constant,Replacement). 定义值。
-define(Func(Var1,Var2,…,Var),Replacement). 定义操作。

使用: ?Constant , ?Func( Vaf1,Var2,…Var )

预定义的宏

  • ?FILE : 展开成当前的文件名
  • ?MODULE : 展开成当前的模块名
  • ?LINE : 展开成当前的行号

宏控制流

  • -undef(Macro) : 取消宏定义
  • -ifdef(Macro) : Macro宏定义过了才执行后面
  • -ifndef(Macro) : Macro宏没定义过才执行后面
  • -else : 用于ifdef,ifndef 之后。
  • -endif : 标记ifdef或ifndef语句的结尾

模式的匹配操作符

例1: func1( [{tag1,A,B}=Z|T)
例2: func1( [tag, {one,A}=Za, B} =Z2 |T])

整数

传统写法: 1, 123,41
K进制整数: K # Digits , 如2#123
$写法: $a是97简写,$1是49简写

进程字典

每个Erlang进程都有一个进程字典的私有数据存储区域,是一种键值对存储。

put(Key,Value) -> OldValue
get(Key) -> Value
get() -> [{Key,Value}] 返回整个字典的数据
get_keys(Value) -> [Key] 返回值为Value的所有键
erase(Key) -> Value 返回Key的关联值,并且删除,没有返回undefined
erase(Key) -> [{Key,Value}] 返回所有值,并删除。

下划线变量

作用1: 命名一个我们不打算使用的变量,例如open(File,_0), open(File,_Mode)
作用2: 用于调试,编译器不会报警告

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值