繁体   English   中英

如何在lua中实现界面?

[英]How implement the interface in lua?

例如,我有a.lua,b.lua,c.lua。 它们有许多相同的代码,它们运行在不同的lua VM中 所以我想实现一个包含相同的a,b,c代码的通用模块。

问题如下:

1.if 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 ++。 非常感谢!!!

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

模块无法解决您的任务,不会为不同的VM共享“common”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM