在C中初始化Lua状态

时间:2014-03-22 20:58:25

标签: c lua

我试图从我的C代码中使用Lua(5.2)。我正在创建一个Lua状态并调用" luaL_openlibs",但是全局函数,例如" loadstring"没有初始化。

lua_State* L = luaL_newstate();
luaL_openlibs(L);
luaL_loadstring(L, "print(loadstring)");
lua_pcall(L, 0, LUA_MULTRET, 0);

结果是:无。简单的Lua代码有效(例如,print(" hello")),标准库(字符串,...)也是如此。请帮我弄清楚我做错了什么,我一直在搜索谷歌几个小时,我发现的只是那些奇怪的旧邮件列表和Lua文档(这也不是很有帮助,IMO)。

感谢。

2 个答案:

答案 0 :(得分:1)

好的,在评论中找到了这个:

@@ LUA_COMPAT_LOADSTRING defines the function 'loadstring' in the base
** library. You can rewrite 'loadstring(s)' as 'load(s)'.

因此在定义了const后我可以使用" loadstring" :)

答案 1 :(得分:1)

reference manual始终非常有用。正如您在底部的表格中看到的那样,Lua 5.2中没有loadstring,最接近的是load。此外,如果您查看该手册的第8.2节,库中的更改,您可以看到5.1中可用的有关loadstring的项目,并且偶然地说loadstring已被{{1}替换相同的功能。

改变来源应始终是最后的手段,即只有在没有其他方式的情况下。在这里,你想要的东西很容易通过C API实现:

load

即使在你不使用C(只是直接Lua)的情况下,你也可以在脚本的顶部做lua_getglobal(L, "load") lua_setglobal(L, "loadstring") 。或者在控制台中loadstring = loadsetenv LUA_INIT "loadstring=load",然后Lua为它运行的每个脚本(从该控制台)执行此操作。或者以.bashrc运行您的脚本。我错过了吗? :)