当前位置: 首页 > article >正文

Lua脚本核心语法介绍

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


一、基础语法特点

  1. 简洁的语法结构

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

    • 变量无需声明类型,类型与值绑定:
      local a = 10     -- 整数
      a = "hello"      -- 切换为字符串
      a = 3.14         -- 切换为浮点数
      
  3. 变量作用域

    • 默认全局变量,local 关键字声明局部变量:
      global_var = 1    -- 全局变量
      local local_var = 2 -- 局部变量
      

二、核心数据类型

Lua 仅有 8 种基础类型:

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

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

表是 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. 条件语句

    if a > 10 then
        print(">10")
    elseif a == 0 then
        print("=0")
    else
        print("<10")
    end
    
  2. 循环

    -- 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. 函数定义

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

    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. 闭包

    function counter()
        local count = 0
        return function()
            count = count + 1
            return count
        end
    end
    
    local c = counter()
    print(c()) -- 输出 1
    print(c()) -- 输出 2
    

六、元表(Metatable)与元方法

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

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 原生支持协程(非抢占式多任务):

local co = coroutine.create(function()
    print("start")
    coroutine.yield()  -- 挂起协程
    print("end")
end)

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

八、模块化

通过 require 加载模块:

-- 定义模块 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 等。


http://www.kler.cn/a/550597.html

相关文章:

  • 图解卷积神经网络(CNN)
  • stm32高级TIM的常用功能
  • 期权隐含波动率是什么意思?
  • 构建了一个 Linux 发行版,基于Debian和WattOS的
  • Node.js 异步并发控制:`p-map` 和 `p-limit` 的使用与对比
  • Day4 25/2/17 MON
  • 阅读论文笔记《Efficient Estimation of Word Representations in Vector Space》
  • 1 Flask路由和试图函数
  • seata基本使用
  • Android车载应用开发常用adb命令
  • 【含文档+源码】基于Web的在线课堂测试课程考评系统的开发与实现
  • Mac zsh使用相关问题之一
  • 深入了解 AppScan 工具的使用:筑牢 Web 应用安全防线
  • 【SpringBoot苍穹外卖】debugDay0 打开前端页面
  • Doris 查询优化秘籍(上篇):关键优化策略剖析
  • Python 面试题
  • 解锁豆瓣高清海报(三)从深度爬虫到URL构造,实现极速下载
  • 轮播图html
  • KVM设置端口转发
  • windows 设置poppler