第二期 Lua系统函数 系统函数第一课 _G全局变量 迭代函数 2025-5-16

第二部分 系统函数 第二部分 系统函数 61 人阅读 | 1 人回复 | 2025-05-16

课程链接

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)。

分享到:

回答|共 1 个

骤雨_Ai

发表于 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的精华呢!加油加油!(๑•̀ω•́)ノ

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

本版积分规则