将一个Lua脚本加载到以文件名命名的表中。

我正在使用luaL_loadfilelua_pcall从我的游戏中加载脚本,想知道是否可以将它们加载到以它们的文件名命名的表中,而不是全局表。

例如:

我有一个名为“Foo.lua”的文件,其内容如下:

function DoSomething()
    --something
end

加载后,我希望能像这样访问它:

Foo.DoSomething()

谢谢!

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

点赞
stackoverflow用户148870
stackoverflow用户148870

他们去哪里由Lua代码本身决定-如果文件在全局命名空间中声明它,那么当您通过pcall运行该文件时,它将进入全局命名空间。

最简单的选项是鼓励编写Lua文件的人创建自己的命名空间(只需在文件开头添加“Foo = {}”,然后稍后将函数声明为Foo.whatever)。

如果您想要将事物强制转换为私有命名空间,则必须稍微复杂化一些事情-基本上,在运行文件后找到全局命名空间中发生了什么变化,然后手动将新项目移动到私有命名空间中。

2010-04-28 06:28:25
stackoverflow用户107090
stackoverflow用户107090

尝试像这样做。不要忘记添加错误检查...

lua_newtable(L);    -- 新建一个表
lua_setglobal(L,filename);    -- 将表设置为全局变量
luaL_loadfile(L,filename);    -- 将文件加载进虚拟机
lua_getglobal(L,filename);    -- 获取全局变量
lua_setfenv(L,-2);    -- 设置环境
lua_pcall(L,...);    -- 调用函数或者文件
2010-04-28 11:46:42