Lua 中的所有全局变量都作为全局变量驻留在一个表中(是的,_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
局部变量有点困难 - 你必须使用 - 但考虑到你想要交互地使用它,你应该只需要全局变量。