首先,我坚持使用Lua 5.0,因为我正在为WoW API(从2006年构建的客户端)开发。为什么折磨自己?因为看到可能的事情,我得到了一些启示。
所以这是我的问题: 我有一个表,其中包含一堆函数,例如,这一个:
function Questie:UNIT_AURA(unitId)
--log("UnitID: "..unitId)
end
我有另一个函数,它应该自动路由到该函数(并且它在某种程度上是这样)。
function Questie:OnEvent()
Questie[event](arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10)
end
在这种情况下,event是一个全局变量,它等于函数的名称,例如UNIT_AURA。 arg1到arg10也是全局的,应该传递给任何函数事件。
该函数被称为正常,但所有参数都是零(即使它们存在于Questie:OnEvent
中。
所以我的问题是,如何使它们正常通过?显然,我做错了。
答案 0 :(得分:2)
这是你的错误(我认为)
function Questie:UNIT_AURA(unitId)
--log("UnitID: "..unitId)
end
- 该声明等同于
function Questie.UNIT_AURA(self, unitId)
--log("UnitID: "..unitId)
end
你可以这样称呼它:
Questie.UNIT_AURA(Questie, unitId)
或者像这样
Questie['UNIT_AURA'](Questie, unitId)
或者像这样
Questie:UNIT_AURA(unitId)
差异在:
或.
好的,那么
function Questie:OnEvent()
Questie[event](arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10)
end
- 该声明等同于
function Questie.OnEvent(self)
local callback = Questie[event]
callback(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10)
end
你作为第一个参数丢失了表,而是传递了arg1
因此,UNIT_AURA self
内部为unitId
,unitId
为nil
预期args = self
,unitId
给定args = unitId
(仅限)
正确的电话是这样的:
function Questie:OnEvent()
Questie[event](self, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10)
end