Lua脚本核心语法介绍

Lua 是一种轻量级、高效的脚本语言 ,其解释器核心是用 C 语言编写的,因此具有出色的可移植性和嵌入性(可轻松集成到其他程序中)。以下是其核心语法特性:


一、基础语法特点

  1. 简洁的语法结构

    • 语句以换行或分号结束,无需强制分号
    • 注释:-- 单行注释--[[ 多行注释 ]]
  2. 动态类型系统

    • 变量无需声明类型,类型与值绑定:

      lua 复制代码
      local a = 10     -- 整数
      a = "hello"      -- 切换为字符串
      a = 3.14         -- 切换为浮点数
  3. 变量作用域

    • 默认全局变量,local 关键字声明局部变量:

      lua 复制代码
      global_var = 1    -- 全局变量
      local local_var = 2 -- 局部变量

二、核心数据类型

Lua 仅有 8 种基础类型:

lua 复制代码
nil        -- 空值(类似 null)
boolean    -- true/false
number     -- 整数或浮点数(内部统一为双精度)
string     -- 不可变字符串(用单引号或双引号)
function   -- 函数(支持闭包)
table      -- 表(核心数据结构,可模拟数组、字典、类等)
userdata   -- 用户自定义数据(用于与 C 交互)
thread     -- 协程(coroutine)

三、表(Table):核心数据结构

表是 Lua 的万能容器,可表示数组、字典、对象等:

lua 复制代码
-- 数组形式(索引默认从 1 开始)
local arr = {10, 20, "apple"}
print(arr[1]) -- 输出 10

-- 字典形式
local dict = {name = "Lua", version = 5.4}
print(dict["name"]) -- 输出 "Lua"

-- 混合结构
local mix = {
    "value1", 
    key = "value2",
    [3] = 100  -- 显式指定数字索引
}

四、控制结构

  1. 条件语句

    lua 复制代码
    if a > 10 then
        print(">10")
    elseif a == 0 then
        print("=0")
    else
        print("<10")
    end
  2. 循环

    lua 复制代码
    -- while 循环
    local i = 1
    while i <= 5 do
        print(i)
        i = i + 1
    end
    
    -- for 循环(数值)
    for i = 1, 5, 2 do  -- 起始值, 结束值, 步长(默认 1)
        print(i)       -- 输出 1, 3, 5
    end
    
    -- 泛型 for(遍历表)
    for k, v in pairs(dict) do
        print(k, v)
    end

五、函数与闭包

  1. 函数定义

    lua 复制代码
    function add(a, b)
        return a + b
    end
    
    -- 匿名函数
    local mul = function(a, b) return a * b end
  2. 多返回值与可变参数

    lua 复制代码
    function swap(a, b)
        return b, a  -- 返回多个值
    end
    
    function sum(...)  -- ... 表示可变参数
        local s = 0
        for _, num in ipairs{...} do
            s = s + num
        end
        return s
    end
  3. 闭包

    lua 复制代码
    function counter()
        local count = 0
        return function()
            count = count + 1
            return count
        end
    end
    
    local c = counter()
    print(c()) -- 输出 1
    print(c()) -- 输出 2

六、元表(Metatable)与元方法

元表用于自定义表的操作行为(类似运算符重载):

lua 复制代码
local t1 = {value = 5}
local t2 = {value = 3}

-- 定义元表的 __add 方法
local mt = {
    __add = function(a, b)
        return {value = a.value + b.value}
    end
}

setmetatable(t1, mt)
setmetatable(t2, mt)

local t3 = t1 + t2
print(t3.value) -- 输出 8

七、协程(Coroutine)

Lua 原生支持协程(非抢占式多任务):

lua 复制代码
local co = coroutine.create(function()
    print("start")
    coroutine.yield()  -- 挂起协程
    print("end")
end)

coroutine.resume(co)  -- 输出 "start"
coroutine.resume(co)  -- 输出 "end"

八、模块化

通过 require 加载模块:

lua 复制代码
-- 定义模块 mymodule.lua
local M = {}
function M.hello()
    print("Hello from module!")
end
return M

-- 使用模块
local mod = require("mymodule")
mod.hello()

总结

Lua 的语法简洁高效,核心特性包括:

  1. 轻量级:解释器仅数百 KB,适合嵌入式场景。
  2. 表驱动设计 :通过 tablemetatable 实现复杂逻辑。
  3. 协程支持:简化异步任务处理。
  4. 易嵌入性:通过 C API 可轻松嵌入其他程序(如游戏引擎、Nginx)。

典型应用场景:游戏脚本(如《魔兽世界》插件)、Redis 脚本、Nginx OpenResty 等。

相关推荐
软件开发技术局1 小时前
撕碎QT面具(8):对控件采用自动增加函数(转到槽)的方式,发现函数不能被调用的解决方案
开发语言·qt
周杰伦fans2 小时前
C#中修饰符
开发语言·c#
yngsqq2 小时前
c# —— StringBuilder 类
java·开发语言
mikey棒棒棒2 小时前
Redis——优惠券秒杀问题(分布式id、一人多单超卖、乐悲锁、CAS、分布式锁、Redisson)
数据库·redis·lua·redisson·watchdog·cas·并发锁
赔罪3 小时前
Python 高级特性-切片
开发语言·python
子豪-中国机器人4 小时前
2月17日c语言框架
c语言·开发语言
夏天的阳光吖4 小时前
C++蓝桥杯基础篇(四)
开发语言·c++·蓝桥杯
oioihoii4 小时前
C++17 中的 std::to_chars 和 std::from_chars:高效且安全的字符串转换工具
开发语言·c++
秋窗75 小时前
Mac下Python版本管理,适用于pyenv不起作用的情况
开发语言·python·macos
柯腾啊5 小时前
VSCode 中使用 Snippets 设置常用代码块
开发语言·前端·javascript·ide·vscode·编辑器·代码片段