搜 索

Erlang丨基本数据结构

  • 99阅读
  • 2022年06月11日
  • 0评论
首页 / 默认分类 / 正文

前言

基本上,编程语言的入门学习,不外乎了解它的历史背景和搭建运行环境,掌握和使用它的基本语法和数据结构。以下就 Erlang 的数据结构进行简单的介绍。

数值 Number

Python3 一样,Erlang 的数值型(整数和浮点数)可以直接赋值,大小受限于内存大小。如果想要获取英文字母的 ASCII 值可以在字母前加上美元符号“$”即可。

1> $A.
65
2> $a.
97

数值型的进制转换格式“Base#Value”,意为从其他进制转为十进制。

1> 2#1000001000.
520
2> 8#1234567.
342391
3> 16#ABCDEF.
11259375

原子 Atom

原子,类似于 Java 中的枚举类 enums,以小写字母开头,并且可以包含小写和大写字符、数字、下划线(_u)和“at”符号(@)。
但是原子类型就是名字而已,没有其它含义。它们与变量不同,变量拥有值,而原子类型没有。所以,如果你将一个值赋予原子,就会发生异常。

1> a = 1.
** exception error: no match of right hand side value 1
2> b = 2.
** exception error: no match of right hand side value 2
3> b.
b

布尔 Boolean

只有 truefalse 两种原子,或者使用比较表达式。
逻辑运算符:与“and”,或“or”,异或“xor”,非“not”;具有短路效果的运算符:且“andalso”,或“orelse”。

1>true and false.
false
2> true or false.
true
3> not true.
false
4> true xor false.
true
5> false andalso true.
false
6> false orelse true.
true

字符串 String

字符串就是使用一对双引号将内容引用起来。

1> Name = "Lucy".
"Lucy"
2> Name = [$L, $u, $c, $y].
"Lucy"

元组 Tuple

元组是一种具有固定数量项的复合数据类型。它可以容纳不同类型的值,格式为一对大括号,“{Value1, Value2, Value3 ...}”,类似于 Json 格式字符串。

1> Name = "Jack".
"Jack"
2> Age = 22.
22
3> User1 = {Name, male, Age}.
{"Jack",male,22}

列表 List

它也可以容纳不同类型的值,格式为一对中括号,“[Value1, Value2, Value3 ...]”。
一般来说,列表中的值最好是同一种类型,方便处理。

1> List1 = [1, 2, 3, 4, 5].
[1,2,3,4,5]
2> List2 = [1, {a, 1}, b, {c, 3}].
[1,{a,1},b,{c,3}]

映射 Map

类似于 Java 中的 Map,用于存储键值对,格式为“#{ Key1 => Value1, Key2 => Value2 ...}”。
maps:put/3 把键 Key 对应关联的值 Value 插入到映射组 Map1。如果键 Key 在映射组 Map1 里已经存在,那么就旧关联的值则会被替换为 Value。

1> UserMap = #{name => "ZhangSan", age => 18, height => 180, gender => male}.
#{age => 18,gender => male,height => 180,name => "ZhangSan"}
2> maps:get(name, UserMap).
"ZhangSan"
3> maps:put(job, "ErlangProgrammer", UserMap).
#{age => 18,gender => male,height => 180,job => "ErlangProgrammer",name => "ZhangSan"}

记录 Record

类似于 Java 中的类,C 中的结构体。格式与 Map 类似:“#<record_name>{Key1 = Value1, Key2 = Value2}”。
记录是另一种形式的元组,它由不同的字段组成。

1> rd(user, {name = "<<>>", age = 0, gender = 1}).
user
2> XiaoMing = #user{}.
#user{name = "<<>>",age = 0,gender = 1}
3> XiaoHong = XiaoMing#user{age = 17, gender = 0}.
#user{name = "<<>>",age = 17,gender = 0}
4> XiaoHong#user.age.
17
5> XiaoHong#user.gender.

参考

Erlang - Data Types
打 赏
  • 支付宝
  • 微信
Alipay
WeChatPay
评论区
暂无评论
avatar