c - lua中如何实现接口(interface)?

标签 c lua

比如我有a.lua,b.lua,c.lua。他们有许多相同的代码,并且他们在不同的lua VM中运行。所以我想实现一个公共(public)模块,其中包含相同的a、b、c代码。

问题如下:

1.如果a、b、c有相同的变量v_status,且v_status的取值范围是一定的。例如,值为:

STAT_NULL = 1
STAT_ACTIVE = 2
STAT_INACTIVE = 3

我想我有两种方法来实现公共(public)模块

第一种方法是:

--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++的方式实现这个功能。 非常感谢!!!

最佳答案

如果您希望在许多虚拟机之间共享该值,唯一的方法是通过主机支持(C 端)。将 getter 和 setter 函数导出到每个虚拟机,这些函数将在 C 源代码中的相同 static int v_status 上运行。如果 Lua VM 位于单独的线程上,请使用访问同步。

模块无法解决您的任务,“通用”不会为不同的虚拟机共享。

关于c - lua中如何实现接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26021416/

相关文章:

c - 显示数组类型的结构程序具有不完整的元素类型

c - C 中的排序算法,使用 qsort 或替代交换方法对指向结构对象的指针数组进行排序

c - 编译时需要左值错误

Python 有 dir(obj) 和 help(obj),在 Lua 中有对应的吗?

c - 如何为 luajit 的 ffi 实现 X11(返回屏幕像素的颜色)C 代码?

java - 在 LuaJ 中获取打印调用

c - 检测当前是否正在读取文件

c - 使用定时器中断使 LED 闪烁(atmega 128)

machine-learning - 如何在 Torch 的 GPU 上将张量的元素限制/舍入到小数点后 4 位?

c++ - 如何从 C++ 创建和调用多个文件中的 lua 函数