根据变量索引某个表?

时间:2016-06-14 00:28:54

标签: lua

有没有办法索引Lua中变量定义的表?例如:

function checkTable(t, k)
    return t[k]
end

checkTable(coffee, 1)

返回任何表的任何键的值。

然而,这将返回表“t”的第1项,而不是表“coffee”;该函数不将“t”识别为变量,而是查找文字表“t”。该怎么做?

1 个答案:

答案 0 :(得分:1)

参见5.3 reference关于环境的§2.2(在5.2中介绍):

  

正如将在§3.2和§3.3.3中讨论的那样,对自由名称(即,未绑定到任何声明的名称)var的任何引用在语法上都被翻译为_ENV.var。此外,每个块都在名为_ENV的外部局部变量的范围内编译(参见§3.3.2),因此_ENV本身绝不是块中的自由名称。

因此,您的函数的正确实现将如下所示:

function checkTable(t, k)
    local tbl = _ENV[t]

    if tbl ~= nil then
      return tbl[k]
    else
      return nil
    end
end

但是这个函数不能访问调用者的环境,除非你把它传递给它,或者你在另一个函数(闭包)中定义它,所以它作为upvalue访问_ENV

还有全局内置变量_G,它是包含所有全局变量的全局环境。