Эквивалент команды Matlab для интерпретатора Lua?

Что такое Lua-эквивалент команды Octave/Matlab/IPython "whos"? Я пытаюсь изучить Lua в интерактивном режиме и хотел бы посмотреть, какие переменные определены в настоящее время.


person Andrew Wagner    schedule 27.03.2012    source источник


Ответы (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 - но, учитывая, что вы хотите использовать его в интерактивном режиме, вам нужны только глобальные переменные.

person Michal Kottman    schedule 27.03.2012