我正在尝试从我的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文档(这也不是很有帮助,海事组织)。
谢谢。
发布于 2014-03-23 00:40:23
参考手册总是非常有用的。正如在底部的表中所看到的,Lua5.2中没有loadstring,最接近的是load。此外,如果您查看该手册第8.2节“库中的更改”,您可以看到5.1中可用的与加载字符串有关的项,顺便说一句,loadstring已经被load取代了,这是相同的功能。
更改源应该永远是最后的手段(只有在没有其他方法的情况下)。在这里,您想要的可以通过want轻松地完成:
lua_getglobal(L, "load")
lua_setglobal(L, "loadstring")即使在不使用C(只使用纯Lua)的情况下,也可以在脚本的顶部执行loadstring = load。或者是控制台中的setenv LUA_INIT "loadstring=load"或.bashrc,那么Lua对它运行的每个脚本(从那个控制台)都执行这个命令。或者以lua -e'loadstring=load' yourScript.lua的形式运行脚本。我错过了什么吗?)
发布于 2014-03-22 21:26:54
好的,在评论中发现了这一点:
@@ LUA_COMPAT_LOADSTRING defines the function 'loadstring' in the base
** library. You can rewrite 'loadstring(s)' as 'load(s)'.因此,在定义了const之后,我可以使用"loadstring“:)
https://stackoverflow.com/questions/22583507
复制相似问题