如何将一个函数推入 Lua 的全局空间 _G 中?
2013-1-13 15:18:32
收藏:0
阅读:114
评论:1
TLDR; 我希望能够从\ _G范围内调用我的函数,以便我可以通过解析字符串列表来调用函数。这可能会因框架要求“package.seeall”而变得更加严重。
我正在使用luci框架,这是OpenWRT路由器的UCI前端。为了在解析特定UCI值时调用自定义函数,我创建了与返回值相同的名称的函数,并通过\ _G调用它们。
解析的数据类似于:
data = {Name="value"}
我的代码看起来像这样:
function main()
local pageValues={modules={}}
for i,x in pairs(data) do
--这是引发错误的部分
pageValues.modules[x]=_G[x]()
--当“newValue=_G [x]()”时也引发错误
end
end
function value()
--当使用“local function value()”时也不起作用
return 'YEA'
end
返回给我的错误是attempt to call field '?' (a nil value)。当我直接传递字符串“value”并使用pageValues.modules [ 'value'] = _G ['value']()时,我收到“attempt to call field' value'(a nil value)”的错误。当我像这样创建一个虚拟变量
dummy = 'value'
pageValues.modules[dummy]=_G[dummy]()
我会收到“attempt to call field '?' (a nil value)” 的错误。如果我使用local dummy ='value',情况也一样。
当我解析\ _G以查看其中是否包含任何函数时,发现它们不在其中。 注意 Luci自动调用package.seeall,我不知道这是否会影响我的全局变量。但是,这可能在回答此问题时很重要。
我最迫切的需求是正确运行此函数。我的次要兴趣是如何确定Lua的作用域,以便以后能够解决LuCI中的沙箱问题。
点赞
评论区的留言会收到邮件通知哦~
推荐文章
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
虽然你的代码并不是一个可执行的完整示例,很难理解正在发生什么,但有一件事可能会发生,就是如果你定义全局变量的模块调用了
module函数,那么每当你尝试设置全局变量时它会在模块表中设置一个键。此外,如果你使用 package.seeall 参数运行模块,则全局赋值仍然会被重定向,唯一的区别是该模块可以读取其他预定义的全局变量。如果是这种情况,你可以通过从适当的模块而不是全局表中读取值来解决问题,或者在创建这些值时直接设置
_G来解决问题。