在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);

结果是:nil。简单的 Lua 代码可以运行(例如,print("hello")),标准库也可以(字符串,...)。请帮我找出我做错了什么,我已经在谷歌上搜索了几个小时,但我找到的都是那些奇怪的旧邮件列表和 Lua 文档(在我看来也不是很有用)。

谢谢。

点赞
用户2657990
用户2657990

在评论中找到以下内容:

@@ LUA_COMPAT_LOADSTRING 在基础库中定义了函数 'loadstring'。您可以将 'loadstring(s)' 重写为 'load(s)'

因此,在定义了这个常量之后,我可以使用“loadstring” :)

2014-03-22 21:26:54
用户869951
用户869951

参考手册总是非常有用的。正如您可以在底部的表格中看到的,Lua 5.2中没有loadstring,最接近的是load。此外,如果您检查该手册的8.2节“库中的更改”,您可以看到一个关于loadstring的项目,在5.1中可用,顺便说一句,loadstring已被load替代,具有相同的功能。

更改源始终应该是最后的选择,只有在没有其他方法时才应该这样做。在这里,你想要的很容易通过C API完成:

lua_getglobal(L,“load”)
lua_setglobal(L,“loadstring”)

即使在您不使用C(只是直接Lua)的情况下,您也可以在脚本顶部执行loadstring=load。或者在控制台或.bashrc中设置setenv LUA_INIT“loadstring=load”,然后Lua会为它运行的每个脚本执行此操作(从该控制台运行)。或作为lua -e'loadstring=load' yourScript.lua运行您的脚本。我漏掉了什么? :)

2014-03-23 00:40:23