例如,我有a.lua,b.lua,c.lua。它们有许多相同的代码,并且它们在不同的lua VM 中运行。所以我想实现一个包含相同的a,b,c代码的公共模块。
问题如下:
1.如果a,b,c具有相同的变量v_status,则v_status的值范围是确定的。例如,值为:
STAT_NULL = 1
STAT_ACTIVE = 2
STAT_INACTIVE = 3
我认为我有两种方法来实现公共模块
第一种方式是:
--common.lua
local common = {}
local v_status = STAT_NULL
function common.set_status(st)
v_status = st
end
function common .get_status()
return v_status
end
return common
在a,b,c中,我需要“通用”模块
local common = require "common"
如果我想设置/获取状态,我可以这样做:
common.set_status(STAT_ACTIVE)
local status = common.get_status()
=============================================== ===================================
第二种方式是:
local common = {}
function common:set_status(st)
self.v_status = st
end
function common:get_status()
return self.v_status
end
return common
在a,b,c中,我可以调用以下函数:
local common = require "common"
common:set_status(STAT_ACTIVE)
local status = common:get_status()
我想知道哪一个是正确的。也许他们都错了。请告诉我正确的方法。 我是lua的新手,我想把这个函数实现为lua的风格而不是c / c ++。 非常感谢!!!
答案 0 :(得分:3)
如果希望在多个VM之间共享该值,则执行此操作的唯一方法是通过主机支持(C端)。将getter和setter函数导出到每个VM,它将在C源中的相同static int v_status
上运行。如果Lua VM位于不同的线程上,请使用访问同步。
模块无法解决您的任务,"常见"将不会为不同的VM共享。