相当于Matlab“whos”命令Lua解释器?

时间:2012-03-27 15:30:22

标签: matlab lua octave ipython

Octave / Matlab / IPython“whos”命令的Lua等价物是什么?我正在尝试以交互方式学习Lua,并希望了解当前定义的变量。

1 个答案:

答案 0 :(得分:8)

Lua中的所有全局变量都驻留在一个可用作全局变量_G的表中(是的,_G._G == _G)。因此,如果要列出所有全局变量,可以使用pairs()

遍历表
function whos()
    for k,v in pairs(_G) do
        print(k, type(v), v) -- you can also do more sophisticated output here
    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  Copyright (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

局部变量有点难度 - 你必须使用Lua's debug facilities - 但考虑到你想要以交互方式使用它,你应该只需要全局变量。