请问这段Lua代码中,千回百转的function和return的作用是什么?

新手上路,请多包涵

Lua语言,一段某游戏mod的代码,DoActionplayercontroller中有定义和实现,只有buffaction一个参数。
本人有扎实的C/C++基础,并且大概了解了Lua中的松散语法和函数,但下面这段看不懂。这段代码是改写原来的DoAction函数吗?为什么pc.DoAction = (function() end)()这里加了最外边的括号并且跟上了一对括号?谢谢。

local pc = player.components.playercontroller
if pc then
    pc.DoAction = (function()
        local DoAction = pc.DoAction

        return function(self, bufaction, ...)
            if bufaction then
                self.inst:PushEvent("playercontroller_move")
            end
            return DoAction(self, bufaction, ...)
        end
    end)()
end
阅读 5k
2 个回答
pc.DoAction=xxx();
function xxx()
   local DoAction=pc.Action;
   return yyy();
end
function yyy(self,bufaction,...)
   if bufaction then
     self.inst:PushEvent("playercontroller_move")
   end
   return DoAction(self,bufaction,...)
end

最后pc.DoAction=DoAction(self,bufaction,...)=pc.Action(self,bufaction,...)

新的DoAction是在原来的DoAction外面包了一层(decorator模式,不过包的是函数不是类)

(function() end)() 是个立刻执行的函数表达式(IIFE)

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进