这块函数理解很不完整。求老司机指点一下。
代码来源与 饥荒单机版mod health info plus 这个插件
//========================
//这里定义一个函数原型
local function _Inject(comp,fn_name,fn)
//备份一个函数 。这里不太明白这里的old是函数地址“引用”还是只是个函数名字??或者别的什么
local old = comp[fn_name]
//这里应该是重新定义一个跟需求函数一模一样的函数
//像entityscript.lua中的 function EntityScript:GetDisplayName() 函数
comp[fn_name] = function(self,...)
//个人感觉这里是获得原来函数的函数块中的所有代码!?
local res = old(self,...)
//这里好像是尾调用,说是等同于goto 。实际游戏里面也就是无限循环的递归调用。
//但是不明白实际意义。保证这些参数传递。
return fn(res,self,...)
end
end
//***希望有老司机说名下上面这块代码每条的意思,或者需要补充哪些lua知识点。
//还有 comp[fn_name] 这个a["x"]的取值方式,对于函数来说取到的是什么?内外网上查了半天也没查到
_Inject(GLOBAL.EntityScript,"GetDisplayName",function(name,self)
//至于调用,只要是这两个参数,当然形参名字任意,但是不明白这两个参数实际跟GetDisplayName这个函数的关系。
//自己试过这两个参数顺序是固定的,而且任意标签名字都可以。
end}
代码来源与 饥荒单机版mod health info plus 这个插件
//========================
//这里定义一个函数原型
local function _Inject(comp,fn_name,fn)
//备份一个函数 。这里不太明白这里的old是函数地址“引用”还是只是个函数名字??或者别的什么
local old = comp[fn_name]
//这里应该是重新定义一个跟需求函数一模一样的函数
//像entityscript.lua中的 function EntityScript:GetDisplayName() 函数
comp[fn_name] = function(self,...)
//个人感觉这里是获得原来函数的函数块中的所有代码!?
local res = old(self,...)
//这里好像是尾调用,说是等同于goto 。实际游戏里面也就是无限循环的递归调用。
//但是不明白实际意义。保证这些参数传递。
return fn(res,self,...)
end
end
//***希望有老司机说名下上面这块代码每条的意思,或者需要补充哪些lua知识点。
//还有 comp[fn_name] 这个a["x"]的取值方式,对于函数来说取到的是什么?内外网上查了半天也没查到
_Inject(GLOBAL.EntityScript,"GetDisplayName",function(name,self)
//至于调用,只要是这两个参数,当然形参名字任意,但是不明白这两个参数实际跟GetDisplayName这个函数的关系。
//自己试过这两个参数顺序是固定的,而且任意标签名字都可以。
end}
