【问题标题】:Equivalent of Matlab "whos" command for Lua interpreter?Lua解释器的Matlab“whos”命令等效?
【发布时间】:2012-03-28 16:27:22
【问题描述】:

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

【问题讨论】:

    标签: matlab lua octave ipython


    【解决方案1】:

    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——但鉴于你想以交互方式使用它,你应该只需要全局变量。

    【讨论】:

      猜你喜欢
      • 2011-12-08
      • 1970-01-01
      • 1970-01-01
      • 2012-06-20
      • 1970-01-01
      • 1970-01-01
      • 2012-11-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多