Skip to content

数据类型

Lua 是一种动态类型语言,它的值可以在运行时改变类型。Lua 中有 8 种基本数据类型:

数据类型描述
nil表示一个未定义的值
boolean布尔值,包括 true 和 false
number数字,双精度浮点数
string字符串
table表,Lua 中唯一的数据结构
function函数
userdata用户数据,用于存储 C 数据结构
thread线程,用于协同程序

nil

nil 表示一个未定义的值,当一个变量被赋值为 nil 时,它会被垃圾回收器回收。

lua
local var = nil
print(var)  -- 输出 nil

boolean

布尔值只有 truefalse 两个值。在条件判断中,只有 falsenil 被视为假,其他值都被视为真。

lua
local isTrue = true
local isFalse = false

if isTrue then
  print("真")
end

if not isFalse then
  print("假的反义是真")
end

number

Lua 中的数字都是双精度浮点数,没有整数类型。

lua
local int = 10
local float = 3.14
local scientific = 1e3  -- 科学计数法,等于 1000

print(int)  -- 输出 10
print(float)  -- 输出 3.14
print(scientific)  -- 输出 1000

string

字符串可以用单引号或双引号表示,也可以用 [[]] 表示多行字符串。

lua
local str1 = 'Hello'
local str2 = "World"
local str3 = [[
  这是
  多行字符串
]]

print(str1)  -- 输出 Hello
print(str2)  -- 输出 World
print(str3)  -- 输出多行字符串

字符串可以使用 .. 运算符连接:

lua
local str = "Hello " .. "World"
print(str)  -- 输出 Hello World

table

表是 Lua 中唯一的数据结构,它可以用来表示数组、字典、对象等。

lua
-- 创建一个表
local person = {
  name = "张三",
  age = 30,
  hobbies = {"读书", "旅游"}
}

-- 访问表中的元素
print(person.name)  -- 输出 张三
print(person["age"])  -- 输出 30
print(person.hobbies[1])  -- 输出 读书

-- 修改表中的元素
person.age = 31
print(person.age)  -- 输出 31

-- 添加新元素
person.gender = "男"
print(person.gender)  -- 输出 男

-- 删除元素
person.gender = nil
print(person.gender)  -- 输出 nil

function

函数是 Lua 中的第一类值,可以存储在变量中,作为参数传递,或作为返回值。

lua
-- 定义一个函数
function add(a, b)
  return a + b
end

-- 将函数存储在变量中
local sum = add
print(sum(10, 5))  -- 输出 15

-- 匿名函数
local multiply = function(a, b)
  return a * b
end
print(multiply(10, 5))  -- 输出 50

userdata

userdata 用于存储 C 数据结构,通常由 C 扩展库使用。

thread

thread 用于协同程序(coroutine),是 Lua 中实现并发的机制。

类型检查

使用 type() 函数可以检查一个值的类型:

lua
print(type(nil))  -- 输出 nil
print(type(true))  -- 输出 boolean
print(type(10))  -- 输出 number
print(type("Hello"))  -- 输出 string
print(type({}))  -- 输出 table
print(type(function() end))  -- 输出 function

类型转换

数字转字符串

lua
local num = 10
local str = tostring(num)
print(type(str))  -- 输出 string

字符串转数字

lua
local str = "123"
local num = tonumber(str)
print(type(num))  -- 输出 number

local str2 = "3.14"
local num2 = tonumber(str2)
print(num2)  -- 输出 3.14

布尔值转字符串

lua
local bool = true
local str = tostring(bool)
print(str)  -- 输出 true

小结

本章节介绍了 Lua 的 8 种基本数据类型,包括 nil、boolean、number、string、table、function、userdata 和 thread。掌握这些数据类型的特性和使用方法,是 Lua 编程的基础。