Lua C API:如何加载定义为模块的 Lua 文件?

我有以下的lua脚本:

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

在cli中可以正常使用,例如:

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

据我所知,它像一个表格一样工作,但每当我尝试加载它作为一个表格时,一个空值被推送到堆栈上。其他每个表都正常工作。

我想使用lua_getglobal不会与模块一起工作,但我找不到正确的加载方式;我该如何做?

原文链接 https://stackoverflow.com/questions/3101667

点赞
stackoverflow用户1491
stackoverflow用户1491

在Lua 5.1中,与其使用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模块功能批评文章。

2010-06-23 13:10:39
stackoverflow用户107090
stackoverflow用户107090

使用 require 来加载 Lua 模块,就像 lua.c 所做的一样。详见 http://www.lua.org/source/5.1/lua.c.html#dolibrary

2010-06-23 13:16:46