首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在C中初始化Lua状态

在C中初始化Lua状态
EN

Stack Overflow用户
提问于 2014-03-22 20:58:24
回答 2查看 1K关注 0票数 2

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

代码语言:javascript
复制
lua_State* L = luaL_newstate();
luaL_openlibs(L);
luaL_loadstring(L, "print(loadstring)");
lua_pcall(L, 0, LUA_MULTRET, 0);

结果为:零。简单的Lua代码可以工作(例如,print("hello")),标准库(字符串,.)也是如此。请帮助我找出我做错了什么,我已经搜索谷歌几个小时了,我发现的只是那些奇怪的旧邮件列表和Lua文档(这也不是很有帮助,海事组织)。

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-03-23 00:40:23

参考手册总是非常有用的。正如在底部的表中所看到的,Lua5.2中没有loadstring,最接近的是load。此外,如果您查看该手册第8.2节“库中的更改”,您可以看到5.1中可用的与加载字符串有关的项,顺便说一句,loadstring已经被load取代了,这是相同的功能。

更改源应该永远是最后的手段(只有在没有其他方法的情况下)。在这里,您想要的可以通过want轻松地完成:

代码语言:javascript
复制
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的形式运行脚本。我错过了什么吗?)

票数 1
EN

Stack Overflow用户

发布于 2014-03-22 21:26:54

好的,在评论中发现了这一点:

代码语言:javascript
复制
@@ LUA_COMPAT_LOADSTRING defines the function 'loadstring' in the base
** library. You can rewrite 'loadstring(s)' as 'load(s)'.

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22583507

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档