我有以下lua脚本:
mydata={}
function update(val)
mydata["x"] = val
if (val == 10)
-- Call C-Api(1)
else
--Register callback with C when free or some event happens
register_callback(callme)
end
function callme()
end
基本上我想在我的C程序/进程中运行这个脚本的两个实例,而不必为每个脚本创建一个新的LUA状态。我想从一个实例调用val = 10的函数update(),并从另一个实例调用val = 20的函数update()。从第二个实例开始,它会注册一个回调函数,并等待被调用。
基本上,脚本文件是我想要实现的一种规则。 系统上的几个事件可以触发此规则或脚本文件。我想根据触发它的事件处理此规则。可能有多个事件触发此脚本同时运行。所以我需要让这个脚本的多个实例按触发它的事件类型进行区分。
总结一下,我希望每个调用者都有单独的mydata实例
我想实现这样的目标。我读了一些我们应该能够运行lua脚本的多个实例的地方,而不必通过在加载脚本之前加载新环境来创建新的lua实例
但我无法找到确切的细节。
有人可以帮忙吗?
答案 0 :(得分:0)
虽然我还不确定你究竟想要实现什么,但是如果你想拥有两个相同功能的实例来保持他们使用私有的数据,你只需要创建一个闭包并返回一个您的C代码将使用的匿名函数。
这样的事情应该有效:
function createenv(callme)
local mydata={}
return function (val) -- return anonymous function
mydata["x"] = val
if (val == 10)
-- Call C-Api(1)
else
--Register callback with C when free or some event happens
register_callback(callme)
end
end
end
现在,您可以执行以下(C或Lua)代码的一部分:
local update = createenv(function() --[[do whatever]] end)
update(10)
然后在另一部分你可以做到:
local update = createenv(function() --[[do something else]] end)
update(20)
彼此之间应该没有任何共同之处。请注意,它们仍然共享相同的Lua状态,但它们的mydata
实例将彼此独立。