lua - 如何从 C 运行 lua 脚本的多个实例

标签 lua luac

我有以下 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 状态。我想从一个实例调用函数 update() with val = 10 并从另一个实例调用函数 update() with val = 20。从第二个实例开始,它注册了一个回调函数并等待被调用。

基本上,脚本文件是我试图实现的一种规则。 系统上的多个事件可以触发此规则或脚本文件。我想根据触发它的事件处理这条规则。可能有多个事件触发此脚本同时运行。因此,我需要运行此脚本的多个实例,以根据触发它的事件类型加以区分。

总而言之,我希望每个调用者都有单独的 mydata 实例

我想实现这样的目标。我读了一些我们应该能够运行 lua 脚本的多个实例而不必通过在加载脚本之前加载新环境来创建新的 lua 实例的地方

但我无法找到确切的细节。

有人能帮忙吗?

最佳答案

虽然我仍然不确定你到底想达到什么目的,但如果你想拥有同一函数的两个实例来保持它们使用的数据的私有(private)性,你只需要创建一个闭包并返回一个匿名函数你的 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 实例将相互独立。

关于lua - 如何从 C 运行 lua 脚本的多个实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32999886/

相关文章:

c++ - 将 luac 字节码嵌入到 C/C++ 源文件中

lua - luac 生成的字节码可以在没有 Lua 库的电脑上使用吗?

php - 强制本地化 os.date()

c++ - 用 Lua/C++ 写一个炸弹人 AI

Redis EVAL-per-event 或 EVAL-all-events-at-once

audio - 在 Roblox 上本地播放音乐

macos - Lua 在 Mac OS X 上编译脚本 - Intel vs PPC

scripting - 如何为多个实体共享/重用 Lua 脚本?

lua - 无法链接最小的 Lua 程序

macos - luac.out : incompatible precompiled chunk