如何在lua中实现接口?

问题描述:

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

如下的问题:

1.如果一个,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 

,B,C,我需要“共同”模块

local common = require "common" 

如果我想设置/获得信tatus,我能做到这些:

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 

,b,C,我可以调用这些函数如下:

local common = require "common" 

common:set_status(STAT_ACTIVE) 
local status = common:get_status() 

我想知道哪一个是正确的。也许他们都错了。请告诉我正确的方法来做到这一点。 我是lua的新手,我想用lua的风格来代替c/C++来实现这个功能。 非常感谢!

+0

这两个都是正确的。区别在于“普通”是否是“对象”。如果将通用模块看作单例对象是有意义的,那么使用':'就是有意义的。如果不是,无论出于何种原因,那么使用'.'可能会更好。这就是说,我不确定为什么对于这个例子的用法来说,一个模块是有意义的。 – 2014-09-24 18:47:31

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

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