Lua回调到模块中

时间:2011-07-08 18:16:14

标签: module callback lua

我的脚本使用

注册自己以进行回调
require "cmodule"
index = 1
cmodule.RegisterSoftButtonDownCallback(index, "callbackFunc")

其中callbackFunc是回调函数的名称(字符串)。现在我把这个脚本变成了一个模块,但是不再调用回调,我假设因为回调函数不在cmodule的范围内。我怎么解决这个问题? (Lua newbie)

cmodule是具有Lua绑定的设备驱动程序。

编辑:我的完整解决方案基于以下BMitch的答案:

require "cmodule"
local modname = "myModule"
local M = {}
_G[modname] = M
package.loaded[modname] = M
local cmodule = cmodule
local _G = _G
setfenv(1,M)

function callbackFunc()
    -- use module vars here
end
_G["myModule_callbackFunc"] = callbackFunc
index = 1
cmodule.RegisterSoftButtonDownCallback(index, "myModule_callbackFunc")

1 个答案:

答案 0 :(得分:2)

您需要在全局空间中定义一些内容,以便将字符串计算回函数调用。

根据它们实现RegisterSoftButtonDownCallback的方式,您可能无法定义函数本身,而不是像myModule.callbackFunc这样的表/字段组合。为了最大限度地减少命名空间污染,如果您无法使用myModule.callbackFunc,那么我建议myModule_callbackFunc=myModule.callbackFunc或类似的东西。所以你的代码看起来像是:

require "cmodule"
index = 1
myModule_callbackFunc=myModule.callbackFunc
cmodule.RegisterSoftButtonDownCallback(index, "myModule_callbackFunc")

为了更好的解决方案,我会与cmodule开发人员合作,让他们的程序接受函数指针而不是字符串。然后你的代码看起来像:

require "cmodule"
index = 1
cmodule.RegisterSoftButtonDownCallback(index, myModule.callbackFunc)