如何在表中向函数传递参数?

首先,我被限制使用 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也是全局的,应该传递给任何事件所对应的函数。函数可以成功运行,但是所有参数都是 nil(即使它们存在于Questie:OnEvent中)。

所以我的问题是,如何使它们正确传递?显然,我做错了什么。

点赞
用户1243636
用户1243636

以下是你的错误(我看到的)

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

预期参数= selfunitId

给定参数= unitId(仅)

正确的调用是这样的:

function Questie:OnEvent()
    Questie[event](self, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10)
end
2015-03-14 10:24:34