【发布时间】:2011-07-10 17:54:40
【问题描述】:
我的脚本使用
注册自己的回调require "cmodule"
index = 1
cmodule.RegisterSoftButtonDownCallback(index, "callbackFunc")
其中 callbackFunc 是回调函数的名称(字符串)。现在我把这个脚本变成了一个模块,但是回调不再被调用,我假设是因为回调函数不在 cmodule 的范围内。我该如何解决这个问题? (Lua 新手)
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")
【问题讨论】:
-
什么是
cmodule?这不是 Lua 5.1 的一部分。它从何而来?是全局变量还是局部变量? -
cmodule 是具有 Lua 绑定的设备驱动程序。我在脚本的开头做了一个require“cmodule”(加载cmodule.dll)。它不是我开发的。如果知道它到底是做什么很重要,我可以尝试联系作者。