Эквивалент Matlab "чья" команда для переводчика Lua? - PullRequest
3 голосов
/ 27 марта 2012

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

1 Ответ

8 голосов
/ 27 марта 2012

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

...