Lua C api:如何加载定义为模块的lua文件?
问题描述:
我有以下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不能使用模块,但我找不到加载它的正确方法;我该怎么做?
答
代替使用module
和dofile
,在脚本运行时简单地返回表示模块的表是最好的做法。所有函数和变量都应在模块脚本中声明为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文章对此事的更多信息。
为什么选择Lua 5.2?它尚未发布。 – u0b34a0f6ae 2010-06-23 13:12:51
对不起,我的意思是Lua 5.1 – 2010-06-23 13:17:13