Bootstrap

003-Lua 基本语法教程

Lua 是一种轻量级脚本语言,语法简单、易学,适合初学者快速上手。以下是 Lua 的基本语法,涵盖变量、数据类型、控制结构、函数和常用特性。


1. 基本结构

1.1 注释

Lua 支持单行注释和多行注释。

-- 这是单行注释

--[[ 
这是多行注释
可以用于注释多段代码 
]]

1.2 区分大小写

Lua 是大小写敏感的语言。例如,varVar 是两个不同的变量。

1.3 语句结束

Lua 的语句可以用换行符分隔,不需要使用分号 ;。但如果希望将多个语句写在一行,可以用分号分隔。

print("Hello") -- 单行语句
a = 10; b = 20; print(a + b) -- 多语句分隔

2. 变量与数据类型

2.1 变量

Lua 是动态类型语言,变量不需要声明类型。

x = 10         -- 数字
name = "Lua"   -- 字符串
is_active = true -- 布尔值
全局变量与局部变量
  • 默认变量是全局变量
  • 使用 local 关键字声明局部变量。
a = 10         -- 全局变量
local b = 20   -- 局部变量
print(a, b)

2.2 数据类型

Lua 提供以下几种数据类型:

类型描述
nil空值,表示变量未赋值。
boolean布尔值,truefalse
number数字类型,支持整数和浮点数。
string字符串。
table表,Lua 的核心数据结构(类似数组和字典)。
function函数类型。
userdata用于和 C 交互的特殊数据类型。
示例
x = nil           -- 空值
is_valid = false  -- 布尔值
age = 25          -- 数字
greeting = "Hello, Lua!" -- 字符串
类型检查

使用 type() 函数检查变量的类型。

print(type(10))          -- 输出:number
print(type("Lua"))       -- 输出:string
print(type(nil))         -- 输出:nil
print(type(true))        -- 输出:boolean

3. 控制结构

3.1 条件语句

Lua 支持 ifelseifelse 语句。

x = 10

if x > 5 then
    print("x 大于 5")
elseif x == 5 then
    print("x 等于 5")
else
    print("x 小于 5")
end

3.2 循环语句

1. while 循环

i = 1
while i <= 5 do
    print(i)
    i = i + 1
end
2. for 循环
  • 数值型 for 循环:
for i = 1, 5 do
    print(i)
end
  • 使用步长:
for i = 1, 10, 2 do
    print(i) -- 输出 1, 3, 5, 7, 9
end
3. 泛型 for 循环(遍历表)
t = {"a", "b", "c"}
for index, value in ipairs(t) do
    print(index, value)
end
4. repeat...until 循环
i = 1
repeat
    print(i)
    i = i + 1
until i > 5

4. 函数

4.1 定义与调用

function greet(name)
    return "Hello, " .. name
end

print(greet("Lua")) -- 输出:Hello, Lua

4.2 匿名函数

multiply = function(a, b)
    return a * b
end

print(multiply(3, 4)) -- 输出:12

4.3 可变参数函数

function sum(...)
    local total = 0
    for _, v in ipairs({...}) do
        total = total + v
    end
    return total
end

print(sum(1, 2, 3, 4)) -- 输出:10

5. 表(Table)

Lua 的表是一种强大的数据结构,可以用作数组、字典或混合使用。

5.1 数组

arr = {10, 20, 30}
print(arr[1]) -- 输出 10 (Lua 的索引从 1 开始)

5.2 字典(键值对)

dict = {name = "Lua", version = 5.4}
print(dict["name"])   -- 输出:Lua
print(dict.version)   -- 输出:5.4

5.3 遍历表

-- 遍历数组
for i, v in ipairs(arr) do
    print(i, v)
end

-- 遍历字典
for k, v in pairs(dict) do
    print(k, v)
end

5.4 表的操作

table.insert(arr, 40) -- 在数组末尾插入元素
print(arr[4])         -- 输出:40

table.remove(arr, 2)  -- 删除第 2 个元素
print(arr[2])         -- 输出:30

6. 字符串操作

6.1 字符串连接

使用 .. 连接字符串。

str1 = "Hello"
str2 = "Lua"
print(str1 .. ", " .. str2) -- 输出:Hello, Lua

6.2 常用字符串函数

s = "Hello Lua"

print(#s)               -- 返回字符串长度:9
print(string.upper(s))  -- 转为大写:HELLO LUA
print(string.lower(s))  -- 转为小写:hello lua
print(string.sub(s, 1, 5)) -- 提取子串:Hello
print(string.find(s, "Lua")) -- 查找子串:返回起始索引

7. 元表与元方法

元表允许我们为表定义自定义行为,例如运算符重载。

a = {x = 10}
b = {x = 20}

meta = {
    __add = function(t1, t2)
        return {x = t1.x + t2.x}
    end
}

setmetatable(a, meta)
setmetatable(b, meta)

result = a + b
print(result.x) -- 输出:30

8. 协程

Lua 的协程是一种轻量级线程机制,支持协作式多任务。

co = coroutine.create(function()
    for i = 1, 3 do
        print("协程运行: ", i)
        coroutine.yield() -- 暂停协程
    end
end)

coroutine.resume(co) -- 输出:协程运行: 1
coroutine.resume(co) -- 输出:协程运行: 2
coroutine.resume(co) -- 输出:协程运行: 3

9. 模块

Lua 支持模块化编程,通过 require 导入模块。

定义模块

-- mymodule.lua
local mymodule = {}

function mymodule.greet(name)
    return "Hello, " .. name
end

return mymodule

使用模块

local mymodule = require("mymodule")
print(mymodule.greet("Lua")) -- 输出:Hello, Lua

10. 小结

  • Lua 的语法简单,适合快速开发。
  • 核心特性包括动态类型、强大的表结构、协程、多种控制结构等。
  • Lua 的轻量级特性使其非常适合作为嵌入式脚本语言。
;