Lua - 在函数中定义全局表

时间:2014-03-12 18:59:01

标签: lua

我在Lua中为Conky编写了一个函数,提供了一个顶级进程列表,在刷新之前会延迟3个部分(间隔)。这需要捕获要在下一次刷新之前的每个后续间隔中存储和显示的刷新数据。

一切都适用于下面的代码,但我感到困惑的是,我无法在{的功能块中定义全局表t1t2t3t4 {1}}。我不得不在块之外创建它们但是为了外观,我想在功能代码块中保留表创建。我已经尝试在表格前面没有“本地”定义列出它们。我找不到正确的语法来将环境声明conky_top_control()用于表创建,如果这是正确的用法。

所以,问题是:如何将函数内的表定义为全局?具体来说,它与下面定义的表_Gt1t2t3有关吗?​​

以下是Lua中的代码,它来自Conky $ {lua top_control):

t4

4 个答案:

答案 0 :(得分:4)

实际上,你不需要全局变量。通常,它们是一种糟糕的做法,会导致代码和其他代码出现严重错误。

以这种方式尝试:

local t1,t2,t3,t4={},{},{},{} -- state variables for conky_top_control
function conky_top_control()
    -- use t1,t2,t3,t4
end

由于本地t1,t2,t3,t4属于定义conky_top_control的范围,因此它们被捕获为参考。它们的值将持续调用conky_top_control,它可以读取和修改它们。

现在,外观考虑让位于令人满意的设计。

答案 1 :(得分:2)

您可以通过添加一个检查全局变量是否先前初始化的条件,将全局变量初始化移动到函数中。

function conky_top_control()
    if not t1 then
        t1,t2,t3,t4={},{},{},{}
    end
    -- rest of function
end

这样,全局变量只会在第一次调用函数时设置为空表。

答案 2 :(得分:1)

  

我很困惑我无法在conky_top_control()的功能块中定义全局表t1,t2,t3和t4

无法/需要定义global variables。当您将赋值移动到函数时,事情就会停止工作,因为每次调用该函数时都会重新赋值变量。

  

我找不到使用环境声明_G到表创建的正确语法,如果这是正确的用法。

您可以使用_G.t1语法从(全局)环境引用t1表。有关详细信息,请参阅此reference

答案 3 :(得分:0)

在Lua中,除非声明为本地变量,否则每个变量都是全局变量。

如果在函数内部定义全局变量时出错,那么Conky可能会设置一些限制。