Lua解释器的类似于Matlab“whos”命令的功能是什么?

Lua 中与 Octave/Matlab/IPython 的 "whos" 命令相当的是什么?我正在尝试交互式地学习 Lua,并想查看当前定义了哪些变量。

原文链接 https://stackoverflow.com/questions/9892696

点赞
stackoverflow用户221509
stackoverflow用户221509

Lua 中的所有全局变量都驻留在一个可作为全局变量 _G 访问的表中(是的,_G._G == _G)。因此,如果您想列出所有全局变量,则可以使用 pairs() 迭代表:

function whos()
    for k,v in pairs(_G) do
        print(k, type(v), v) -- 你还可以在这里使用更复杂的输出
    end
end

请注意,这也会为您提供所有 Lua 基本函数和模块。您可以通过检查启动时除了 Lua 提供的之外没有定义其他全局变量时创建的表中的值来过滤它们:

-- whos.lua
local base = {}
for k,v in pairs(_G) do
    base[k] = true
end
return function()
    for k,v in pairs(_G) do
        if not base[k] then print(k, type(v), v) end
    end
end

然后,您可以使用此模块,如下所示:

$ lua
Lua 5.1.5  版权所有(C) 1994-2012 Lua.org,PUC-Rio
> whos = require 'whos'
> a = 1
> b = 'hello world!'
> whos()
a   number  1
b   string  hello world!
whos    function    function: 0x7f986ac11490

本地变量有一点难度,但是鉴于您希望交互使用它们,您应该只需要全局变量。

2012-03-27 15:55:04