2010-06-23 68 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