我试图从我的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)。
感谢。
答案 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 = load
或setenv LUA_INIT "loadstring=load"
,然后Lua为它运行的每个脚本(从该控制台)执行此操作。或者以.bashrc
运行您的脚本。我错过了吗? :)