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

请问这段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

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

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


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,...)
【热门文章】
【热门文章】