如何将参数传递给表中的函数?

时间:2015-03-14 09:47:08

标签: lua lua-table

首先,我坚持使用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中。

所以我的问题是,如何使它们正常通过?显然,我做错了。

1 个答案:

答案 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内部为unitIdunitIdnil 预期args = selfunitId
给定args = unitId(仅限)

正确的电话是这样的:

function Questie:OnEvent()
    Questie[event](self, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10)
end