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