我的脚本使用
注册自己以进行回调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")
答案 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)