erlang基础(一)

1.and、or 和 andalso、orelse的区别
and or 会去计算两边的表达式, 而 andalso orelse 求值时是短路机制
----andalso 是与运算,当左边的运算为false时 ,返回false,不再去计算右边的表达式
----oresle 或运算,~为true时返回true。

2.(注意) erlang中的小等于号是 -----> 用 " =< " 来表示, 不等于号用 " /= " 表示。其他未发现

3. 宏
----个人理解,就是用一个term()代替另一个一个term(),term()可以是一个原子、表达式等
----define(SERVER,2) -----> ?SERVER === 2
----?MODULE 表示当前的模块名
----?FILE 表示当前的文件名
----?LINE 表示当前的行号
2).宏控制流,和case--of 、if差不多
-ifdef(Marco)。 当 Marco有过定义才会执行后面的代码
-ifndef(Marco). 当Marco没有定义过才执行后面的代码
-endif。 是上两个语句的结尾
模板:
-ifdef(Macro).
-define(SERVER,fang_niu_de_cui_hua).
-else.
-define(SERVER,er_wa_an_lian_cui_hua).
-endif.

4.当引号和双引号的区别
---在erlang中使用单引号括以来的是原子atom(),双引号是字符串
(严格说erlang没有字符串,字符串的字面量就是列表)

5.erlang
函数式编程语言(变量只能赋值一次)。
动态类型语言(变量类型在运行时决定,代码需要编译后才能运行)。
一种面向并发的语言

6.列表
--存放任意数量的事物,创建办法是使用中括号把列表元素括起来。
[A | B]. 其中A被称为列表头,B为列表尾。

7.元祖
--把一些数量固定的项目组成单一的实体,使用大括号把表示的值括起来。{}

8.关卡(guard)
---一种结构,增强模式匹配的威力
===>关卡中的逗号(,)表示并且,分号表示“或者”。
关键字when

9.列表推导
[A || A <- L]
类似于lists模块的filter,map等函数,可以让程序变得更加简短
--A 是一个变量或者 表达式,A从L中提取,存在输出。
例子:[2* X || X <- L]. L = [1,2,3,4].
输出为[2,4,6,8]

2).做一个归集器
odd_and_even(L) ->
Odd -> [X || X <- L , (X rem 2) =:= 1],
Even -> [X || X <- L , (X rem 2) =:= 0],
{Odd,Even}.

10.记录
--用记录声明来命名元祖中的元素
格式: -record(state,{key1 = 2,key2 = 5}).
=====state为记录的名称,键值对
获取: #state.Key -> 2

更新记录: X = #state{key1 = 3}.

11.映射组
--和记录差不多,省略了记录明,键值的分隔符使用 => 或者 :=.
语法: #{key => 1,key2 => 2}.
获取: D = #{a => 1,b => 2}.
2).映射组在系统中是有序集合存储的,和创建或打印的顺序无关,

3).两种分隔符的区别
F = #{a =>2,b := 3}.
=> : 两种用途
1. F1 = F#{a => 3}. 将已经存在的键更新新值,
2. F2 = F#{c => 3}. 给新的映射组添加一个新的键值对
:= :一种用途
1. F3 = F#{a := 4}. 将已经存在的键更新为新值。
2.报错
4). 内置函数、
maps:new().

猜你喜欢

转载自www.cnblogs.com/ye-jing/p/12705727.html
今日推荐