Lua语言,一段某游戏mod的代码,DoAction
在playercontroller
中有定义和实现,只有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,...)