有没有办法索引Lua中变量定义的表?例如:
function checkTable(t, k)
return t[k]
end
checkTable(coffee, 1)
返回任何表的任何键的值。
然而,这将返回表“t”的第1项,而不是表“coffee”;该函数不将“t”识别为变量,而是查找文字表“t”。该怎么做?
答案 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
,它是包含所有全局变量的全局环境。