魔兽地图编辑器吧 关注:65,501贴子:3,843,301
  • 5回复贴,共1

怎么使用lua调试和lua闭包问题?

取消只看楼主收藏回复

lua调试不知道怎么调试。。
lua闭包研究了2天,不知道如何解决。函数内部子函数称为闭包。闭包需要包含上级函数的变量数据,如同上下文。
lua注册的触发器动作、计时器函数等等每次触发事件都会新增一个闭包,jass代码相应的增加一个,不会自动删除创建的闭包和jass代码。


IP属地:湖南1楼2024-11-24 09:19回复
    与全局变量同一等级的函数不会新增闭包。


    IP属地:湖南2楼2024-11-24 09:25
    收起回复
      2025-10-06 10:49:34
      广告
      不感兴趣
      开通SVIP免广告
      简单的办法:
      使用handle绑定闭包id,始终使用新的闭包,解除旧的闭包引用并替换上一个绑定的jass代码。


      IP属地:湖南4楼2024-11-24 09:52
      回复
        不知道闭包怎么创建的?
        启动计时器每次都创建闭包:
        local timer=CJ.CreateTimer()
        CJ.TriggerAddAction(trig, function()
        function TimerFunc()
        end
        CJ.TimerStart(timer, 1.00, true, TimerFunc)
        end)
        TriggerAddAction没有按循环创建多个闭包。。
        local timer=CJ.CreateTimer()
        for i=1,100 do
        CJ.TriggerAddAction(trig, function()
        function TimerFunc()
        end
        CJ.TimerStart(timer, 1.00, true, TimerFunc)
        end)
        end


        IP属地:湖南5楼2024-11-24 10:42
        收起回复
          修正错误:"lua注册的触发器动作、计时器函数等等每次触发事件都会新增一个闭包"
          混淆了计时器动作和触发器动作,触发器动作触发没有新增闭包,计时器启动后应该使用的都是一个闭包。


          IP属地:湖南6楼2024-11-24 10:53
          回复
            按照之前的设想修改了代码,保留了闭包的使用,运行正常,只是简单测试了一下,可能有BUG,暂时懒得管了。


            IP属地:湖南12楼2024-11-24 15:17
            回复