美文网首页
[Erlang开发之路]八、Erlang顺序编程补漏

[Erlang开发之路]八、Erlang顺序编程补漏

作者: 循环不计次 | 来源:发表于2019-07-18 10:58 被阅读0次

一、算数表达式及其优先级

操作符 描述 参数 优先级
X+/-Y 加减法 数值 3
X*/Y 乘除法 数值 2
X div Y 整除 整数 2
X rem Y 取余 整数 2
X band Y 按位于 整数 2
X bor Y 按位或 整数 3
X bxor Y 按位异或 整数 3
X bsl N 左移 整数 3
X bsr N 右移 整数 3
bnot 按位取反 整数 2

二、元数(arity)

即函数的参数个数

三、属性

1.预定义的模块属性

  • -module(modname).
    modname必须是一个原子类型,且和文件名一致

  • -import(Mod,[Fun1/Arity,...])
    从Mod中导入列表中的函数到本模块中,调用时就无需指定模块名了,但是erlang标准库是不用导入的

  • -export([Fun1/Arity,....])
    导出当前模块里的函数,只有导出之后才可以被外部调用

  • -compile(Options)
    编译器的编译选项,可以是单个,也可以是列表

  • -vsn(Version)
    指定模块的版本号,Version可以是任何字面数据类型

2.用户定义的模块属性

  • -sometag(Value)
    sometag必须是一个原子类型,Value是一个字面数据类型,编译时会被打包,运行时可以读取属性
    读取方法:modname:module_info()
    返回一个列表,Value在其中一个tag为attributes的元组中
    另一种读取方法:beam_lib:chunks("ModSrc",[attributes])区别在于前者需要加载模块,后者不需要

四、块表达式

应用场景:代码某处要求是单个表达式,但我们需要做多个事情,也就是使用表达式序列。
举例:

begin
    Expr1,
    ...,
    ExprN
 end.

五、布尔值

Erlang没有单独的布尔值类型,但是可以用原子类型的true和false表示

六、布尔表达式

  • not B1:逻辑非
  • B1 and B2:逻辑与
  • B1 or B2:逻辑或
  • B1 xor B2:逻辑异或

七、注释

Erlang的注释符号是%,很可惜,他有没有块的注释

八、包含文件

  • -include(FileSrc).
  • -include_lib(FileSrc).
    包含文件的扩展名是.hrl,比如记录的定义会放在hrl里方便统一rr

九、宏

1.定义方法

  • -define(Constant,Replacement).
  • -define(Func(Var1,...,VarN),replacement).
    当处理器遇到了类似?MacroName形式的表达式时,会展开这个宏,并进行计算替换
-define(Func(a,b),{a,b}).
foo(A)->
    ?Func(1,1).%扩展之后就是{1,1}

还有一些预定义提供了当前模块的信息

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

2.宏控制流

  • -undef().取消宏定义
  • -ifdef().判断是否定义过,true则往下执行
  • -ifndef().false则往下执行
  • -else.用于ifdef和ifndef后面
  • -endif.用于结束ifdef和ifndef
    举例:
-ifdef(debug_flag).
-define(DEBUG(X),io:format("DEBUG ~p:~p ~p~n",[?MODULE,?LINE,X])).
-else.
-define(DEBUG(X),void).
-endif.

十一、进程字典

相当于erlang进程里的私有数据区域。
操作BIF:

  • put(Key,Value)->OldValue.键存在则更新值,不存在则创建关联
  • get(Key)->Value.
  • get()->[{Key,Value}]返回整个字典
  • get_keys(Value)->[Key]返回值是Value的所有Key
  • erase(Key)->Value 删除Key.
  • erase()->[{Key,Value}]删除整个字典

十二、比较数据类型

这里侧重讲其中4个

  • ==
    这个比较要慎重使用,100次里有99次应该用的是=:=
    ==只有在比较浮点数和整数时可用。
  • /=与=/=
    /=这个比较的意思是不等于,而=/=的意思是不完全相同

PS:我再也不在内网写note了!被坑了

相关文章

网友评论

      本文标题:[Erlang开发之路]八、Erlang顺序编程补漏

      本文链接:https://www.haomeiwen.com/subject/lphklctx.html