从C中访问函数环境中的Lua变量
发布时间:2020-12-16 07:33:19 所属栏目:百科 来源:网络整理
导读:这可能是一个简单的问题,但我很难过.这是Lua 5.1. 我有一个在自己的环境中运行的脚本.在那个环境中,我有一个名为“plugin”的变量,我从C中设置如下: lua_getfield(L,LUA_REGISTRYINDEX,getScriptId()); // Put script's env table onto the stack -- env_ta
这可能是一个简单的问题,但我很难过.这是Lua 5.1.
我有一个在自己的环境中运行的脚本.在那个环境中,我有一个名为“plugin”的变量,我从C中设置如下: lua_getfield(L,LUA_REGISTRYINDEX,getScriptId()); // Put script's env table onto the stack -- env_table lua_pushstring(L,"plugin"); // -- env_table,"plugin" luaW_push(L,this); // -- env_table,"plugin",*this lua_rawset(L,-3); // env_table["plugin"] = *this -- env_table lua_pop(L,-1); // Cleanup -- <<empty stack>> 在运行我的Lua脚本之前,我设置了这样的函数环境: lua_getfield(L,getScriptId()); // Push REGISTRY[scriptId] onto stack -- function,table lua_setfenv(L,-2); // Set that table to be the env for function -- function 当我的脚本运行时,它可以按预期看到插件变量并与之交互.到现在为止还挺好. 有一次,Lua脚本调用一个C函数,在该函数中,我想看看是否设置了插件变量. 我尝试过很多东西,而且我似乎无法看到插件变量.以下是我尝试过的4件事: lua_getfield(L,LUA_ENVIRONINDEX,"plugin"); bool isPlugin = !lua_isnil(L,-1); lua_pop(L,1); // Remove the value we just added from the stack lua_getfield(L,LUA_GLOBALSINDEX,"plugin"); bool isPlugin2 = !lua_isnil(L,1); // Remove the value we just added from the stack lua_getglobal(L,"plugin"); bool isPlugin3 = !lua_isnil(L,1); // Remove the value we just added from the stack lua_pushstring(L,"plugin"); bool isPlugin4 = lua_isuserdata(L,1); 不幸的是,所有isPlugin变量都返回false.就好像从Lua调用的C函数无法在Lua环境中看到变量集. 知道如何从C中看到插件变量吗? 谢谢! 解决方法
Lua中的每个功能都有自己的环境.它们不会继承任何人调用它们的环境.因此,如果您的C函数不使用具有此插件变量的环境,那么它将无法看到它.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- c# – NoSQL世界中的唯一性是什么意思,我如何处理MongoDB中
- 如何防止Oracle SQL Developer中的“参数PLSQL_DEBUG被弃用
- c 11 – 移动unique_ptr后,std :: unique_ptr ::返回的值是
- C#实现手机验证码
- Ruby 访问 CGI 变量
- c# – 与所有有效格式的IPv6地址匹配的正则表达式
- iphone – 如何从UIView / UIScrollView创建图像
- ReactNative基础(二)了解组件的生命周期
- oracle通过触发器实现登录登出日志记录
- Swift - 网络请求报App Transport Security has blocked a