找回密码
 立即注册
    查看: 137|回复: 1

    【浮生梦】Lua系统函数 第一课 _G全局变量 迭代函数

    [复制链接]

    328

    主题

    66

    回帖

    1474

    积分

    积分
    1474
    发表于 2025-5-16 00:22:02 | 显示全部楼层 |阅读模式

    课程链接

    Lua系统函数课程总结

    1. 全局变量 _G

    • _G 是一个全局的 table,存储所有全局变量和函数。
    • 可以通过 _G 动态访问或修改全局变量。
      a = 123  
      print(_G["a"])  -- 输出 123  
      _G["name"] = "张三"  -- 动态创建全局变量
      
    • 适用于动态调用变量名或模块的场景。

    2. 版本号 _VERSION

    • 全局变量,返回当前 Lua 版本(如 "Lua 5.4")。
    • 可修改但一般不推荐:
      print(_VERSION)  -- 输出当前版本  
      _VERSION = "Lua 5.5"  -- 可修改(但无实际意义)
      

    3. 错误处理 error(message)

    • 主动抛出错误并终止程序:
      if condition then error("出错了!") end
      

    4. 断言 assert(v, message)

    • 条件 v 为假时抛出错误(带可选提示):
      assert(a > 100, "a 必须大于 100")  -- 若a≤100则报错
      
    • 常用于调试阶段验证逻辑。

    5. 垃圾回收(GC)

    • Lua 有自动 GC,但提供手动控制函数(如 collectgarbage()):
      collectgarbage("collect")  -- 触发完整GC
      
    • 实际开发中较少手动调用,引擎通常自动管理。

    6. 动态加载脚本 dofile(filename)

    • 加载并执行指定 Lua 文件,每次调用都会重新加载:
      dofile("test.lua")  -- 执行 test.lua
      
    • require 的区别:
      • require 会缓存模块(只加载一次)。
      • dofile 每次调用都重新加载(适合动态调试)。

    7. 获取原表 getmetatable(table)

    • 返回表的原表(若无则返回 nil):
      local t = {}  
      setmetatable(t, { __index = { x = 1 } })  
      print(getmetatable(t))  -- 输出原表内容
      

    8. 迭代函数

    1. next(table, key)

      • 手动迭代,返回下一个键值对(无序):
        local t = { a=1, b=2 }  
        local k, v = next(t)  -- 获取第一个键值(如 "a", 1)
        
    2. pairs(table)

      • 遍历所有键值对(包括非连续索引):
        for k, v in pairs(t) do print(k, v) end
        
    3. ipairs(table)

      • 仅遍历数组部分(连续数字索引,到第一个 nil 停止):
        local arr = { "a", "b", [3]="c" }  
        for i, v in ipairs(arr) do print(i, v) end  -- 输出 1="a", 2="b"
        

    关键区别总结

    函数/特性 用途 示例
    _G 访问/修改全局变量 _G["var"] = 1
    assert vs error 断言条件 vs 直接报错 assert(a>0); error("msg")
    dofile vs require 动态加载 vs 缓存加载 dofile("x.lua")
    pairs vs ipairs 遍历所有键值 vs 仅数组部分 for k,v in pairs(t)

    作业建议:练习动态变量访问(_G)、文件加载(dofile)、迭代表数据(next/pairs)。

    0

    主题

    0

    回帖

    -22

    积分

    积分
    -22
    发表于 2025-5-16 00:22:03 | 显示全部楼层
    哇~同学你好呀!(◕‿◕✿) 看到你在认真学习Lua系统函数呢,真棒!让我来帮你总结一下重点吧~

    关于全局变量_G:
    1. -- 获取全局变量
    2. print(_G["a"])
    3. -- 动态创建全局变量
    4. _G["name"] = "张三"
    复制代码
    嘻嘻~这个_G就像是一个大口袋,装着所有全局的东西呢!

    版本号_VERSION:
    1. print(_VERSION) -- 会输出"Lua 5.1"之类的版本号
    复制代码
    不过同学要注意哦,修改_VERSION只是表面功夫,不会真的改变版本呢(。•́︿•̀。)

    错误处理:
    1. if not condition then
    2.     error("哎呀出错啦!")
    3. end
    复制代码
    assert和error的区别就像:
    assert是"我觉得应该这样"
    error是"不行!必须这样!"(๑•̀ㅂ•́)و✧

    迭代函数超重要呢!
    1. -- pairs遍历所有
    2. for k,v in pairs(t) do
    3.     print(k,v)
    4. end
    5. -- ipairs只遍历数组部分
    6. for i,v in ipairs(arr) do
    7.     print(i,v)
    8. end
    复制代码
    记住哦:
    pairs是"我全都要"
    ipairs是"只要整齐的部分"(ノ◕ヮ◕)ノ*:・゚✧

    同学要好好练习作业哦~特别是动态变量和迭代函数,这些都是Lua的精华呢!加油加油!(๑•̀ω•́)ノ

    有什么不明白的随时问我呀~我会像小太阳一样温暖地帮你解答的!(◍•ᴗ•◍)❤
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则