Lua 的基本语法
1. 变量与数据类型
1.1 变量
Lua 是一种动态类型语言,变量无需声明类型,类型信息在运行时确定。变量的命名规则如下:
- 变量名由字母、数字和下划线组成,但不能以数字开头。
- 变量名区分大小写。
- 避免使用 Lua 的保留关键字(如
and
、or
、if
等)。
1.1.1 变量的声明与赋值
Lua 中的变量通过赋值语句声明。未赋值的变量默认值为 nil
。
1
2
3
|
a = 10 -- 全局变量
local b = 20 -- 局部变量
print(a, b) -- 输出: 10 20
|
1.1.2 变量的作用域
- 全局变量:默认情况下,变量是全局的,可以在整个程序中访问。
- 局部变量:使用
local
关键字声明的变量是局部的,作用域仅限于当前代码块。
1
2
3
4
5
6
|
local x = 5
if true then
local y = 10
print(x, y) -- 输出: 5 10
end
print(y) -- 输出: nil (y 是局部变量,超出作用域)
|
1.2 数据类型
Lua 支持以下基本数据类型:
数据类型 |
描述 |
nil |
表示无效值或空值,类似于其他语言中的 null 。 |
boolean |
布尔类型,取值为 true 或 false 。 |
number |
数值类型,包括整数和浮点数(Lua 5.3 引入整数类型)。 |
string |
字符串类型,使用单引号或双引号表示。 |
table |
表类型,Lua 中唯一的数据结构,可以表示数组、字典等。 |
function |
函数类型,Lua 中的函数是一等公民,可以作为变量传递。 |
userdata |
用户自定义数据类型,通常用于与 C 语言交互。 |
thread |
协程类型,用于实现并发编程。 |
1.2.1 类型检查与转换
- 使用
type()
函数可以获取变量的类型。
- Lua 会自动在字符串和数字之间进行类型转换。
1
2
3
4
5
6
|
print(type(10)) -- 输出: number
print(type("hello")) -- 输出: string
print(type(true)) -- 输出: boolean
local num = "10" + 5 -- 字符串 "10" 自动转换为数字
print(num) -- 输出: 15
|
1.2.2 字符串
- 字符串可以使用单引号或双引号表示。
- 多行字符串可以使用
[[...]]
表示。
- 字符串连接使用
..
运算符。
1
2
3
4
5
6
7
|
local str1 = "Hello"
local str2 = 'Lua'
local str3 = [[
This is a
multi-line string.
]]
print(str1 .. " " .. str2) -- 输出: Hello Lua
|
1.2.3 表(Table)
表是 Lua 中唯一的数据结构,可以表示数组、字典、对象等。
1
2
3
|
local arr = {1, 2, 3} -- 数组
local dict = {name = "Lua", version = "5.4"} -- 字典
print(arr[1], dict["name"]) -- 输出: 1 Lua
|
2. 运算符
2.1 算术运算符
Lua 支持常见的算术运算符:
+
(加)、-
(减)、*
(乘)、/
(除)、%
(取模)、^
(幂运算)。
1
2
3
|
local a, b = 10, 3
print(a + b) -- 输出: 13
print(a ^ b) -- 输出: 1000
|
2.2 关系运算符
Lua 的关系运算符用于比较两个值:
==
(等于)、~=
(不等于)、<
(小于)、>
(大于)、<=
(小于等于)、>=
(大于等于)。
1
2
|
print(10 == 10) -- 输出: true
print(10 ~= 5) -- 输出: true
|
2.3 逻辑运算符
Lua 的逻辑运算符包括:
1
2
3
|
print(true and false) -- 输出: false
print(true or false) -- 输出: true
print(not true) -- 输出: false
|
2.4 其他运算符
..
:字符串连接。
#
:获取字符串长度或表的长度。
1
2
|
local str = "Hello"
print(#str) -- 输出: 5
|
3. 条件控制
3.1 if
语句
Lua 的 if
语句用于条件判断,语法如下:
1
2
3
4
5
6
7
|
if condition then
-- 条件为真时执行的代码
elseif condition2 then
-- 条件2为真时执行的代码
else
-- 其他情况执行的代码
end
|
示例:
1
2
3
4
5
6
7
8
|
local score = 85
if score >= 90 then
print("优秀")
elseif score >= 60 then
print("及格")
else
print("不及格")
end
|
3.2 if
的简写形式
Lua 支持简写的 if
语句:
1
2
|
local result = (score >= 60) and "及格" or "不及格"
print(result)
|
4. 循环结构
4.1 while
循环
while
循环在条件为真时重复执行代码块:
1
2
3
4
5
|
local i = 1
while i <= 5 do
print(i)
i = i + 1
end
|
4.2 for
循环
Lua 的 for
循环有两种形式:
- 数值
for
循环:
1
2
3
|
for i = 1, 5 do
print(i)
end
|
- 泛型
for
循环(用于遍历表):
1
2
3
4
|
local t = {1, 2, 3}
for k, v in ipairs(t) do
print(k, v)
end
|
4.3 repeat-until
循环
repeat-until
循环先执行代码块,然后检查条件:
1
2
3
4
5
|
local i = 1
repeat
print(i)
i = i + 1
until i > 5
|
5. 总结
Lua 的基本语法简洁而强大,涵盖了变量与数据类型、运算符、条件控制和循环结构等核心内容。通过掌握这些基础知识,您可以编写简单的 Lua 程序,并为后续学习 Lua 的高级特性打下坚实的基础。