Lua 教程 - 第一章:Lua 入门基础
第一章:Lua 入门基础
欢迎开始 Lua 学习之旅!Lua 是一种轻量级、高效且可嵌入的脚本语言。它的设计目标是作为一种扩展语言,嵌入到应用程序中,为其提供脚本功能。
1.1 简介
Lua 的历史与发展
timeline
title Lua 发展历程
section 1993年
Lua 诞生 : 巴西里约热内卢天主教大学
: Roberto Ierusalimschy
: Luiz Henrique de Figueiredo
: Waldemar Celes
section 1990年代
Lua 1.0-3.0 : 基础功能完善
: 数据库引擎扩展
section 2000年代
Lua 5.0 : 新增完整元表
: 匿名函数
Lua 5.1 : 虚拟机重写
: 模块系统
section 2010年代
Lua 5.2 : goto 语句
: 垃圾回收改进
Lua 5.3 : 整数类型支持
: 位运算
section 2020年代
Lua 5.4 : 常量表达式
: tostring 优化
Lua 的特点与应用场景
-
轻量级: Lua 的源码非常精简,编译后的二进制文件也很小,非常适合嵌入式设备。
-
高效: Lua 拥有极高的执行效率,是目前速度最快的脚本语言之一。
-
可扩展: Lua 提供了易于使用的 C API,方便与其他语言(如 C/C++)进行交互。
-
应用场景:
- 游戏开发: 魔兽世界(World of Warcraft)、愤怒的小鸟(Angry Birds)、Roblox 等都大量使用了 Lua。
- 嵌入式系统: 用于路由器、智能家居设备等的配置和控制。
- Web 开发: OpenResty 将 Lua 嵌入到 Nginx 中,用于高性能 Web 应用开发。
- 脚本扩展: Adobe Lightroom、Redis 等软件支持 Lua 脚本。
mindmap
root((Lua))
特点
轻量级
高效
可扩展
易嵌入
应用场景
游戏开发
魔兽世界
愤怒的小鸟
Roblox
嵌入式系统
路由器
智能家居
Web开发
OpenResty
高性能API
脚本扩展
Adobe Lightroom
Redis
Nginx
安装和配置 Lua 环境
Lua 的安装非常简单。
-
Windows: 推荐使用 Lua for Windows 或者直接下载编译好的二进制文件。
-
Linux: 大多数发行版都可以通过包管理器安装,例如
sudo apt-get install lua5.3。 -
macOS: 可以使用 Homebrew 安装:
brew install lua。
安装完成后,在终端输入 lua -v,如果能看到版本信息,说明安装成功。
第一个 Lua 程序:Hello World
创建一个名为 hello.lua 的文件,输入以下内容:
print("Hello, World!")
在终端运行:
lua hello.lua
输出:
Hello, World!
1.2 基础语法
注释
Lua 支持单行注释和多行注释。
-- 这是单行注释
--[[
这是多行注释
可以跨越多行
]]
标识符
标识符用于命名变量、函数等。
-
由字母、数字和下划线组成。
-
不能以数字开头。
-
区分大小写。
-
避免使用下划线加大写字母(如
_VERSION),因为这些通常被 Lua 保留用于特殊用途。
关键字
以下是 Lua 的保留关键字,不能用作标识符:
and break do else elseif end
false for function if in local
nil not or repeat return then
true until while
全局变量与局部变量
-
全局变量: 默认情况下,变量都是全局的,不需要声明即可直接赋值使用。访问未初始化的全局变量会返回
nil。 -
局部变量: 使用
local关键字声明。局部变量的作用域仅限于声明它的代码块。推荐尽量使用局部变量,因为访问速度更快,且避免污染全局环境。
a = 10 -- 全局变量
local b = 20 -- 局部变量
function test()
c = 30 -- 全局变量(即使在函数内赋值,若没加local也是全局)
local d = 40 -- 局部变量
end
第一章:Lua 入门基础
欢迎开始 Lua 学习之旅!Lua 是一种轻量级、高效且可嵌入的脚本语言。它的设计目标是作为一种扩展语言,嵌入到应用程序中,为其提供脚本功能。
1.1 简介
Lua 的历史与发展
timeline
title Lua 发展历程
section 1993年
Lua 诞生 : 巴西里约热内卢天主教大学
: Roberto Ierusalimschy
: Luiz Henrique de Figueiredo
: Waldemar Celes
section 1990年代
Lua 1.0-3.0 : 基础功能完善
: 数据库引擎扩展
section 2000年代
Lua 5.0 : 新增完整元表
: 匿名函数
Lua 5.1 : 虚拟机重写
: 模块系统
section 2010年代
Lua 5.2 : goto 语句
: 垃圾回收改进
Lua 5.3 : 整数类型支持
: 位运算
section 2020年代
Lua 5.4 : 常量表达式
: tostring 优化
Lua 的特点与应用场景
-
轻量级: Lua 的源码非常精简,编译后的二进制文件也很小,非常适合嵌入式设备。
-
高效: Lua 拥有极高的执行效率,是目前速度最快的脚本语言之一。
-
可扩展: Lua 提供了易于使用的 C API,方便与其他语言(如 C/C++)进行交互。
-
应用场景:
- 游戏开发: 魔兽世界(World of Warcraft)、愤怒的小鸟(Angry Birds)、Roblox 等都大量使用了 Lua。
- 嵌入式系统: 用于路由器、智能家居设备等的配置和控制。
- Web 开发: OpenResty 将 Lua 嵌入到 Nginx 中,用于高性能 Web 应用开发。
- 脚本扩展: Adobe Lightroom、Redis 等软件支持 Lua 脚本。
mindmap
root((Lua))
特点
轻量级
高效
可扩展
易嵌入
应用场景
游戏开发
魔兽世界
愤怒的小鸟
Roblox
嵌入式系统
路由器
智能家居
Web开发
OpenResty
高性能API
脚本扩展
Adobe Lightroom
Redis
Nginx
安装和配置 Lua 环境
Lua 的安装非常简单。
-
Windows: 推荐使用 Lua for Windows 或者直接下载编译好的二进制文件。
-
Linux: 大多数发行版都可以通过包管理器安装,例如
sudo apt-get install lua5.3。 -
macOS: 可以使用 Homebrew 安装:
brew install lua。
安装完成后,在终端输入 lua -v,如果能看到版本信息,说明安装成功。
第一个 Lua 程序:Hello World
创建一个名为 hello.lua 的文件,输入以下内容:
print("Hello, World!")
在终端运行:
lua hello.lua
输出:
Hello, World!
1.2 基础语法
注释
Lua 支持单行注释和多行注释。
-- 这是单行注释
--[[
这是多行注释
可以跨越多行
]]
标识符
标识符用于命名变量、函数等。
-
由字母、数字和下划线组成。
-
不能以数字开头。
-
区分大小写。
-
避免使用下划线加大写字母(如
_VERSION),因为这些通常被 Lua 保留用于特殊用途。
关键字
以下是 Lua 的保留关键字,不能用作标识符:
and break do else elseif end
false for function if in local
nil not or repeat return then
true until while
全局变量与局部变量
-
全局变量: 默认情况下,变量都是全局的,不需要声明即可直接赋值使用。访问未初始化的全局变量会返回
nil。 -
局部变量: 使用
local关键字声明。局部变量的作用域仅限于声明它的代码块。推荐尽量使用局部变量,因为访问速度更快,且避免污染全局环境。
a = 10 -- 全局变量
local b = 20 -- 局部变量
function test()
c = 30 -- 全局变量(即使在函数内赋值,若没加local也是全局)
local d = 40 -- 局部变量
end
数据类型简介
Lua 是动态类型语言,变量不需要声明类型。Lua 有 8 种基本数据类型(将在下一章详细介绍):
-
nil -
boolean -
number -
string -
userdata -
function -
thread -
table
graph TD
A[Lua 数据类型] --> B[简单类型]
A --> C[复合类型]
A --> D[特殊类型]
B --> B1[nil]
B --> B2[boolean]
B --> B3[number]
B --> B4[string]
C --> C1[table]
C --> C2[function]
D --> D1[userdata]
D --> D2[thread]
style B fill:#e1f5ff
style C fill:#fff4e1
style D fill:#ffe1f5
1.3 运算符
算术运算符
+ (加), - (减), * (乘), / (除), // (整除, Lua 5.3+), % (取模), ^ (乘方)
print(10 + 2) -- 12
print(10 / 3) -- 3.3333333333333
print(10 // 3) -- 3
print(2 ^ 3) -- 8.0
关系运算符
== (等于), ~= (不等于), <, >, <=, >=
print(10 == 10) -- true
print(10 ~= 20) -- true
逻辑运算符
and, or, not
-
and: 如果第一个操作数为假,则返回第一个操作数;否则返回第二个操作数。 -
or: 如果第一个操作数为真,则返回第一个操作数;否则返回第二个操作数。 -
not: 取反。
注意: 在 Lua 中,只有 false 和 nil 为假,其他所有值(包括 0 和空字符串)都为真。
print(true and false) -- false
print(true or false) -- true
print(not false) -- true
print(10 and 20) -- 20
print(nil or "default") -- "default" (常用技巧)
其他运算符
-
..: 字符串连接 -
#: 获取长度(字符串或表)
print("Hello " .. "World") -- "Hello World"
print(#"Hello") -- 5
运算符优先级
从高到低:
-
^ -
not,#,-(一元) -
*,/,//,% -
+,- -
.. -
<,>,<=,>=,~=,== -
and -
or
graph LR
A[运算符优先级] --> B1[最高]
A --> B2[高]
A --> B3[中]
A --> B4[低]
A --> B5[最低]
B1 --> C1[^ 乘方]
B1 --> C2[not # - 一元]
B2 --> D1[* / // % 乘除取模]
B3 --> E1[+ - 加减]
B3 --> E2[.. 字符串连接]
B4 --> F1[< > <= >= ~= == 关系运算]
B5 --> G1[and]
B5 --> G2[or]
style B1 fill:#ff6b6b
style B2 fill:#ffa94d
style B3 fill:#ffd43b
style B4 fill:#69db7c
style B5 fill:#4dabf7
练习题
-
编写一个 Lua 脚本,计算并打印
10 + 20 * 5的结果。 -
尝试定义一个局部变量和一个全局变量,并在不同作用域内访问它们,观察区别。
-
使用逻辑运算符
and和or实现一个简单的默认值逻辑(如果变量x为nil,则将其赋值为0)。
下一章预告:我们将深入探讨 Lua 的数据类型与值,包括字符串操作和强大的表(Table)结构。