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

3
我有以下 Lua 脚本:

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

这在使用命令行界面(cli)时是有效的,例如:

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

据我所了解,它的工作方式类似于表格,但每当我尝试将其作为表格加载时,就会将一个nil值推送到堆栈上。其他所有表格都正常工作。
我认为使用lua_getglobal无法与模块一起使用,但我也找不到正确的加载方式;我应该怎么做?
2个回答

4

3

在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 模块函数批判文章以获取更多相关信息。


为什么选择Lua 5.2?它还没有发布。 - u0b34a0f6ae

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接