2014-09-24 92 views
1

例如,我有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

回答

3

如果您希望在多個虛擬機之間共享該值,唯一的方法是通過主機支持(C端)。將getter和setter函數導出到每個虛擬機,這些虛擬機將在C源代碼中使用相同的static int v_status。如果Lua VM在單獨的線程上,請使用訪問同步。

模塊無法解決您的任務,不會爲不同的虛擬機共享「常用」。