gpt4 book ai didi

lua - 打印 Lua 中当前作用域可访问的所有局部变量

转载 作者:行者123 更新时间:2023-12-03 10:13:07 25 4
gpt4 key购买 nike

我知道如何使用以下代码打印“所有”全局变量

for k,v in pairs(_G) do
print("Global key", k, "value", v)
end

所以我的问题是如何对当前正在执行的函数可访问的所有变量执行此操作,这可以做 locals()为 Python 做。

最佳答案

这是一个 locals() 的实现功能。它将从调用范围返回一个本地表:

function locals()
local variables = {}
local idx = 1
while true do
local ln, lv = debug.getlocal(2, idx)
if ln ~= nil then
variables[ln] = lv
else
break
end
idx = 1 + idx
end
return variables
end

请注意,在 lua REPL 中,每一行都是一个单独的块,具有单独的局部变量。此外,返回内部变量(名称以 '(' 开头,如果您想删除它们):
> local a = 2; for x, v in pairs(locals()) do print(x, v) end
a 2
(*temporary) function: 0x10359b38

感谢你的接纳。你已经解开了最后一块拼图! ;-)

上值是来自外部作用域的局部变量,用于当前函数。他们都不在 _G也不在 locals()
function upvalues()
local variables = {}
local idx = 1
local func = debug.getinfo(2, "f").func
while true do
local ln, lv = debug.getupvalue(func, idx)
if ln ~= nil then
variables[ln] = lv
else
break
end
idx = 1 + idx
end
return variables
end

示例(请注意,您必须使用 a 才能显示):
> local a= 2; function f() local b = a; for x,v in pairs(upvalues()) do print(x,v) end end; f()
a 2

关于lua - 打印 Lua 中当前作用域可访问的所有局部变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2834579/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com