Erlang 数据类型
任何编程语言,则需要使用变量来存储各种类型的信息。变量是存储器保留位置用来存储数据值。这意味着,当你创建一个变量时在内存预留一些空间来存储变量相关的数据值。
我们可能会存储各种数据类型,如字符串,字符,宽字符,整数,浮点数,布尔等信息。基于变量的数据类型,操作系统分配内存,并决定什么可以存储在保留的存储器位置中。
内置数据类型
Erlang提供了多种内置数据类型。以下是是在 Erlang 中定义的数据类型的列表 -
数字 − 在 Erlang 中,有两种类型的数字类型:整数和浮点数;
原子 − 原子是文字,一个常数的名称。原子被封闭在单引号('),如果它不以小写字母开头,或者如果它包含其它字符不是字母数字字符,下划线(_)或 @。
布尔 − 在 Erlang 中布尔数据类型是两个保留原子:true 和 false;
位字符串 − 字节序列用来存储非类型化的内存区域;
元组 − 元组是具有固定数量的混合数据类型的术语。在元组中的每一项称为一个元素。元素的数量被认为是元组的大小;
映射 − 映射是用 键-值关联的可变数量的复合数据类型。映射中的每个键值关联称为关联对。键值对的部分被称为元素。关联对(键-值)的数目被认为是映射的大小;
列表 − 列表是由可变数量的混合数据类型组成。列表中的每个项被称为一个元素。元素的数量被认为是列表的长度。
注 - 你会惊奇地看到,看不到上面列表中的字符串的类型。这是因为在 Erlang 中是完全没有定义字符串数据类型的。但是,我们将在后面的章节中看到如何处理字符串。下面是每个数据类型使用的例子。每个数据类型将详细在随后的章节中进行讨论。
数字
数字的数据类型如何使用的例子将在下面的程序中演示。该程序显示了 2 个整数的相加。
示例
-module(helloworld).
-export([start/0]).
start() ->
io:fwrite("~w",[1+1]).
执行上面的程序,输出结果如下:
- 2
原子类型
原子必须以小写字母开头,并且可以包含大写和小写字母,数字,下划线(_)和“at”符号(@)。我们还可以在单引号中使用原子。
原子数据类型如何使用的例子如下面的程序中所示。在这个程序中,我们正在创建一个原子被称为 atom1 。
示例
-module(helloworld).
-export([start/0]).
start() ->
io:fwrite(atom1).
执行上面的程序,输出结果如下:
- atom1
布尔值
布尔数据类型使用的例子如下面的程序所示。这个例子是比较 2 个整数的值,并打印生成的布尔值到控制台。
示例
-module(helloworld).
-export([start/0]).
start() ->
io:fwrite(2 =< 3).
执行上面的程序,输出结果如下:
- true
位字符串
位字符串数据类型如何使用的例子,如下面的程序所示。这个程序定义一个位字符串由2个比特位组成。binary_to_list 是 Erlang 中定义的一个内置函数,可以用于将一个位字符串转换为列表。
示例
-module(helloworld).
-export([start/0]).
start() ->
Bin1 = <<10,20>>,
X = binary_to_list(Bin1),
io:fwrite("~w",[X]).
执行上面的程序,输出结果如下:
- [10,20]
元组
元组数据类型如何使用的例子,如下面的程序中所示。在这里,我们定义一个元组 P,并有3项数据。tuple_size是在 Erlang 中定义的一个内置函数,它是用来确定一个元组的大小。
示例
-module(helloworld).
-export([start/0]).
start() ->
P = {john,24,{june,25}} ,
io:fwrite("~w",[tuple_size(P)]).
执行上面的程序,输出结果如下:
- 3
映射
如何使用映射(Map)数据类型如下面的程序中所示的例子。在这里,我们定义一个Map M1 有 2 个映射。map_size是在 Erlang 中定义一个内置函数,它是用来确定一个映射的大小。
示例
-module(helloworld).
-export([start/0]).
start() ->
M1 = #{name=>john,age=>25},
io:fwrite("~w",[map_size(M1)]).
执行上面的程序,输出结果如下:
- 2
列表
列表数据类型如何使用的例子如下面的程序中所示。在这里,我们定义一个列表L,它有 3 个数据项。length 是在 Erlang 中定义一个内置函数,它是用来确定该列表的大小。
示例
-module(helloworld).
-export([start/0]).
start() ->
L = [10,20,30] ,
io:fwrite("~w",[length(L)]).
执行上面的程序,输出结果如下:
- 3