TLDR;我的函数不能从 _G 范围调用,我希望它们可以通过解析字符串列表来调用函数。package.seeall
框架要求的a 可能会加剧这种情况。
我在 luci 框架中工作,它是 OpenWRT 路由器的 UCI 前端。为了创建在解析特定 UCI 值时调用的自定义函数,我创建了共享返回值名称的函数,这些函数通过 _G 调用。
解析后的数据如下所示:
data = {Name="value"}
我的代码如下所示:
function main()
local pageValues={modules={}}
for i,x in pairs(data) do
--here is the part that throws the error
pageValues.modules[x]=_G[x]()
--also throws error when "newValue=_G[x]()
end
end
function value()
--also does not work with "local function value()"
return 'YEA'
end
返回给我的错误是attempt to call field '?' (a nil 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 中的沙盒问题。