2010-06-23 103 views
3

我有以下LUA腳本:Lua C api:如何加載定義爲模塊的lua文件?

module("modoo",package.seeall) 
foo=1 
bar={12,34} 

使用CLI,如工作正常:

> dofile "mod_modoo.lua" 
> =modoo.foo 
1 
> =modoo 
table: 0x86ce058 

據我的理解,它就像一個表,但每當我試裝它作爲一個表,一個零值被壓入堆棧。其他表格正常工作。

我認爲使用lua_getglobal不能使用模塊,但我找不到加載它的正確方法;我該怎麼做?

回答

3

代替使用moduledofile,在腳本運行時簡單地返回表示模塊的表是最好的做法。所有函數和變量都應在模塊腳本中聲明爲local,以便返回的表提供唯一的訪問點,並且不會從其他模塊的全局變量被踐踏。應按照以下方式使用require導入模塊。

mod_modoo.lua:

return { foo = 1, bar = { 12, 34 } } 

modoo_test.lua:

> local modoo = require "mod_modoo" 

然而,它往往是漂亮帶來的模塊表(即modoo)作爲一個全球性的,而不明確指定。爲此,除了從腳本中返回外,還要爲模塊表分配一個全局引用。在這種情況下,該模塊可以如下使用:

mod_modoo.lua:

modoo = { foo = 1, bar = { 12, 34 } } 
return modoo 

modoo_test.lua:

> require "mod_modoo" 
> print(modoo.foo) 
1 

Lua Module Function Critiqued文章對此事的更多信息。

+0

爲什麼選擇Lua 5.2?它尚未發佈。 – u0b34a0f6ae 2010-06-23 13:12:51

+0

對不起,我的意思是Lua 5.1 – 2010-06-23 13:17:13