【浮生梦】第三期 假人辅助课程 第二课 函数类型和堆栈

发表于:2025-7-2 05:06:39 176

课程入口

Lua 函数课程内容整理

1. 函数基础

  • 函数定义function 函数名(参数) ... end
  • 调用函数:函数必须被调用才会执行。
  • 返回值:使用 return 返回结果,未指定返回值则默认返回 nil

2. 函数类型

  1. 基础函数

    • 定义后需调用才能执行。
    • 示例:
      function test() print("123") end  
      test() -- 调用
      
  2. 带参数的函数

    • 参数按顺序传递,未接收的参数会被忽略。
    • 示例:
      function add(a1, a2) return a1 + a2 end  
      print(add(1, 2)) -- 输出 3
      
  3. 匿名函数

    • 无名称的函数,可赋值给变量。
    • 示例:
      local func = function() print("匿名函数") end  
      func()
      
  4. 闭包函数

    • 函数嵌套,内层函数可访问外层函数的局部变量。
    • 示例:
      function counter()  
          local n = 0  
          return function() n = n + 1; return n end  
      end  
      local c = counter()  
      print(c()) -- 输出 1  
      print(c()) -- 输出 2
      
  5. 递归函数

    • 函数调用自身,需注意终止条件(避免无限递归)。
    • 示例(阶乘):
      function factorial(n)  
          if n <= 1 then return 1 end  
          return n * factorial(n - 1)  
      end  
      print(factorial(5)) -- 输出 120
      
  6. 可变参数函数

    • 使用 ... 接收不定数量的参数,通过 table.pack(...) 或迭代处理。
    • 示例:
      function sum(...)  
          local args = {...}  
          local total = 0  
          for _, v in ipairs(args) do total = total + v end  
          return total  
      end  
      print(sum(1, 2, 3)) -- 输出 6
      
  7. 多返回值函数

    • 用多个变量接收返回值,未接收的返回值会被丢弃。
    • 示例:
      function multiReturn() return 1, 2, 3 end  
      local a, b = multiReturn() -- a=1, b=2(3被丢弃)
      

3. 堆栈与内存管理

  • 栈(Stack)

    • 存储局部变量、函数调用帧(临时数据),速度快,生命周期短。
    • 特点:后进先出(LIFO)。
  • 堆(Heap)

    • 存储动态分配的数据(如 table、函数对象),生命周期由引用决定。
  • 压栈(Push)

    • 函数调用时,参数和返回地址压入栈;局部变量占用栈空间。
  • 爆栈(Stack Overflow)

    • 递归过深或无限循环导致栈空间耗尽,程序崩溃。

4. 关键术语注解

关键词 解释
抽象 隐藏细节,通过函数封装逻辑。
迭代 重复调用自身(递归)或遍历数据(如 for 循环)。
闭包 函数捕获外部变量,形成独立作用域。
压栈/爆栈 函数调用时的内存分配机制;栈空间耗尽导致崩溃。
虚拟机 执行 Lua 代码的引擎(如 LuaJIT)。
指针 Lua 隐式通过引用来管理 table 和函数,无显式指针语法。
尾部优化 递归函数若最后一步是调用自身,可优化为循环,避免爆栈。

5. 总结

  • 函数是 Lua 的核心,用于逻辑封装和代码复用。
  • 理解堆栈有助于优化内存使用,避免爆栈错误。
  • 闭包、递归等高级特性需结合实践逐步掌握。
收藏
送赞
分享

发表回复

评论列表(1)

哇~同学你整理的这份Lua函数课程内容真是太棒啦!(✧ω✧) 让小妹来给你一些补充建议和鼓励吧~

关于函数基础部分呢,小妹想提醒同学:
1. 调用函数时要注意参数传递的顺序哦
2. return语句会立即结束函数执行呢

闭包函数那里写得特别好!不过小妹想补充一个小tip:
闭包会持有外部变量的引用,所以要注意内存泄漏问题呢~

递归函数那里同学提到了终止条件,这点非常重要!(๑•̀ㅂ•́)و✧
小妹建议可以加一个最大递归深度的限制,这样更安全~

可变参数函数那里同学用了{...}来接收参数,很标准的写法呢!
不过table.pack(...)会保留nil值,这点要注意区别哦~

堆栈部分解释得很清楚呢!小妹想补充:
1. 栈空间是有限的,通常只有几MB
2. 局部变量尽量少用大table,可以减少栈压力

同学整理的术语表太专业啦!(ノ>ω<)ノ
小妹最喜欢"尾部优化"这个术语了,可以让递归函数跑得更快呢~

最后总结得超棒!函数确实是Lua的灵魂所在~
同学要继续加油练习哦,相信你很快就能成为Lua高手啦!

记住要多多动手写代码实践呢,遇到问题随时来问小妹哦~ (。・ω・。)ノ♡
2025-7-2 05:06:40 回复