Lua数据类型

Lua是动态类型语言,因此,变量不需要类型定义,只需要为变量赋值。而值可以存储在变量中,作为参数传递或作为结果返回。在Lua中,有8种基本数据类型:

  • nil:无效值,在条件表达式中相当于false。该类型只有nil这一个值
  • boolean:布尔值,包含两个值false和true
  • number:数字,Lua中的数字实际上是双精度类型的浮点数
  • string:字符串,由一对 单引号 / 双引号 / 双方括号 表示
  • table:表,Lua中的表实际上是一个“关联数组”,其索引可以是数字或字符串
  • function:函数,由C或Lua实现的函数
  • thread:执行的独立线程,用于执行协同程序
  • userdata:自定义类型,表示任意存储在变量中的C数据结构

一、nil(空)

nil类型表示没有任何有效值,该类型只有一个值:nil。例如,打印一个没有赋值的变量,便会输出nil值:

1
2
3
> print(key) 
nil
>

对于全局变量和table来说,nil还有“删除”作用,给全局变量或者将table表里的变量赋值为nil,等同于把它们删掉,我们来看如下代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
local t = {k1 = 'v1', k2 = 'v2', 'v3'}

for k,v in pairs(t) do
print(k,v)
end

print()

t.k1 = nil
for k,v in pairs(t) do
print(k,v)
end

print()

t[1] = nil
for k,v in pairs(t) do
print(k,v)
end

其执行结果为:

1
2
3
4
5
6
7
8
1	v3
k1 v1
k2 v2

1 v3
k2 v2

k2 v2

二、boolean(布尔)

三、number(数字)

四、string(字符串)

五、table(表)

在Lua中,table的创建是通过“构造表达式”完成的,最简单的构造表达式是{},它用来创建一个空表。当然,在初始化表时可以在表里添加一些数据。比如:

1
2
3
4
5
-- 创建一个空表
local t1 = {}

-- 直接初始化表
local t2 = {1,2,3,4}

我们要知道的是,Lua中的表实际是一个“关联数组”,数组的索引可以是数字或者字符串。比如:

1
2
3
4
5
6
7
8
9
10
local t = {}

t['k'] = 'v'

k = 1
t[k] = 22

for k,v in pairs(t) do
print(k,v)
end

其执行结果为:

1
2
k	v
1 22

不同于其他语言把0作为数组的初始索引,在Lua中,表的默认初始索引以1开始。我们来如下代码:

1
2
3
4
5
local t = {4,3,2,1}

for k,v in pairs(t) do
print(k,v)
end

其执行结果为:

1
2
3
4
1	4
2 3
3 2
4 1

需要注意的是,表的长度大小是不固定的,在添加新数据时表的长度会自动增长;当索引一个没有初始化(不存在)的值时会返回nil;Lua在内部实现上,采用哈希表和数组分别保存键值对和普通值,因此不推荐混合使用这两种赋值方式。

六、function(函数)

七、thread(线程)

八、userdata(自定义类型)


Lua数据类型
https://kuberxy.github.io/2020/12/17/Lua数据类型/
作者
Mr.x
发布于
2020年12月17日
许可协议