Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Lua中将函数推入_G(全局空间)_Lua_Globals - Fatal编程技术网

如何在Lua中将函数推入_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

TLDR;我的函数不能从_G作用域调用,我希望它们是这样的,这样我就可以通过解析字符串列表来调用函数。这可能会因为
包而加剧。请参阅框架所需的所有

我在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]()
我可以调用我的函数,只要它们不是本地声明的。