第一章:Lua 入门基础

欢迎开始 Lua 学习之旅!Lua 是一种轻量级、高效且可嵌入的脚本语言。它的设计目标是作为一种扩展语言,嵌入到应用程序中,为其提供脚本功能。

1.1 简介

Lua 的历史与发展

Lua 诞生于 1993 年,由巴西里约热内卢天主教大学(Pontifical Catholic University of Rio de Janeiro)的 Roberto Ierusalimschy、Luiz Henrique de Figueiredo 和 Waldemar Celes 创建。“Lua” 在葡萄牙语中是“月亮”的意思。

Lua 的特点与应用场景

  • 轻量级: Lua 的源码非常精简,编译后的二进制文件也很小,非常适合嵌入式设备。

  • 高效: Lua 拥有极高的执行效率,是目前速度最快的脚本语言之一。

  • 可扩展: Lua 提供了易于使用的 C API,方便与其他语言(如 C/C++)进行交互。

  • 应用场景:

    • 游戏开发: 魔兽世界(World of Warcraft)、愤怒的小鸟(Angry Birds)、Roblox 等都大量使用了 Lua。
    • 嵌入式系统: 用于路由器、智能家居设备等的配置和控制。
    • Web 开发: OpenResty 将 Lua 嵌入到 Nginx 中,用于高性能 Web 应用开发。
    • 脚本扩展: Adobe Lightroom、Redis 等软件支持 Lua 脚本。

安装和配置 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

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 中,只有 falsenil 为假,其他所有值(包括 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

运算符优先级

从高到低:

  1. ^

  2. not, #, - (一元)

  3. *, /, //, %

  4. +, -

  5. ..

  6. <, >, <=, >=, ~=, ==

  7. and

  8. or

练习题

  1. 编写一个 Lua 脚本,计算并打印 10 + 20 * 5 的结果。

  2. 尝试定义一个局部变量和一个全局变量,并在不同作用域内访问它们,观察区别。

  3. 使用逻辑运算符 andor 实现一个简单的默认值逻辑(如果变量 xnil,则将其赋值为 0)。


下一章预告:我们将深入探讨 Lua 的数据类型与值,包括字符串操作和强大的表(Table)结构。