如何在Lua中将函数推入_G(全局空间)
TLDR;我的函数不能从_G作用域调用,我希望它们是这样的,这样我就可以通过解析字符串列表来调用函数。这可能会因为如何在Lua中将函数推入_G(全局空间),lua,globals,Lua,Globals,TLDR;我的函数不能从_G作用域调用,我希望它们是这样的,这样我就可以通过解析字符串列表来调用函数。这可能会因为包而加剧。请参阅框架所需的所有 我在luci框架中工作,它是OpenWRT路由器的UCI前端。为了创建在解析特定UCI值时调用的自定义函数,我创建了共享返回值名称的函数,这些函数通过_G调用 解析的数据如下所示: data = {Name="value"} function main() local pageValues={modules={}} for i,x
包而加剧。请参阅框架所需的所有
我在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
我的代码如下所示:
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
返回给我的错误是尝试调用字段“?”(一个nil值)
当我用pageValues.modules['value']=\u G['value']()直接传递字符串“value”时,我收到尝试调用字段“value”(一个零值)
什么时候创建一个虚拟变量
dummy = 'value'
pageValues.modules[dummy]=_G[dummy]()
我收到试图调用字段“?”(一个空值)
。如果我使用localdummy='value'
当我解析\u G
以查看其中是否有我的函数时,我发现它们不是注意Luci会自动调用软件包。请参阅所有
,我不知道这是否会影响我的global。但是,回答这个问题可能很重要
我最迫切的需要是让这个函数正确运行。我的第二个兴趣是如何确定Lua中的作用域,以便将来能够在LuCI中解决沙盒问题。要理解代码中发生了什么有点困难,因为它不是一个包含的可执行示例,但可能发生的一件事是,如果定义globals的模块调用了模块
函数,则无论何时尝试设置全局,它都会在模块的表中设置一个键。此外,如果您使用package.seeall参数运行模块,那么全局分配仍然会重定向-唯一的区别是模块可以读取其他预定义的全局变量
如果是这种情况,您可以通过不尝试从全局表中读取值(而是从相应的模块中读取)或在创建这些值时直接设置\G
来解决问题。谢谢!查看模块
函数,我看到它为变量设置了一个范围<代码>模块(“luci.controller.name”,package,seeall)
通过这样调用pageValues.modules[x]=luci.controller.name[x]()
我可以调用我的函数,只要它们不是本地声明的。