根据变量索引特定的表?

Lua 是否有一种方法可以根据变量来索引一个表?例如:

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

checkTable(coffee, 1)

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

但是,这将返回表 "t" 的第 1 项,而不是表 "coffee";该函数无法将 "t" 识别为变量,而是正在寻找字面表 "t"。应该如何处理?

点赞
用户4546885
用户4546885

见 5.3 手册中关于环境的第 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

但是,除非您将其传递给它,或者您在另一个函数(闭包)中定义它,否则此函数将无法访问调用者的环境,因此它将访问 _ ENV 作为 upvalue。


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

2016-06-14 00:37:39