Lua解释器中类似Matlab的“whos”命令的等效命令是什么?

3
什么是Lua版本的Octave/Matlab/IPython "whos"命令?我正在尝试交互式地学习Lua,并想查看当前定义的变量。
1个回答

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的调试工具 - 但考虑到您想要交互式使用它,您应该只需要全局变量。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接