Lua:如何从G中提取函数?
目前,我正在尝试显示存储在_G中的所有内容。 用G来读和写表格是很容易的 有人知道如何对type函数执行同样的操作吗 我的目标是返回一个字符串,其中包含存储在_G表中的函数 干杯,谢谢Lua:如何从G中提取函数?,lua,Lua,目前,我正在尝试显示存储在_G中的所有内容。 用G来读和写表格是很容易的 有人知道如何对type函数执行同样的操作吗 我的目标是返回一个字符串,其中包含存储在_G表中的函数 干杯,谢谢 Max要在\G中显示所有内容,可以执行以下操作: for n in pairs(_G) do print(n) end 如果只想获取类型函数: for n in pairs(_G) do if n=="type" then print(n) end end 您可以
Max要在
\G
中显示所有内容,可以执行以下操作:
for n in pairs(_G) do print(n) end
如果只想获取类型
函数:
for n in pairs(_G) do
if n=="type" then
print(n)
end
end
您可以检查上面的输出有关函数的唯一信息是其参数的名称(除非删除调试信息)
注意:在某些语言(如Smalltalk)中,函数对象将其源代码作为其属性公开。当Lua启动时,存储在
\u g
中的所有函数都是C函数。你想用它们做什么?我试图理解调用函数时到底发生了什么。例如:如果执行print(Foo),为什么会显示Foo的内容。你能理解我吗?;)我建议你问一个单独的,明确的问题。嗨,想澄清一下。。。检查此语句:print(_G[“print”])此返回:函数:0x41b850准确地说,我想阅读此返回的“后面的内容”。您的意思是要检查print
在lua中是如何实现的?您无法访问普通Lua中的内置函数体,因为print
的源代码已经编译为字节码。当然,如果您想查看print
的源代码,您可以查看该语言repo中的lua
C
文件。这是一个糟糕的示例,因为我想使用lua程序提供的函数执行您描述的过程。这个函数不是用内置的…,它有一些字母数字代码。啊,我现在明白你的意思了。您可以使用debug
库及其getinfo
函数进行此操作,尽管我认为您无法立即访问函数体debug.getinfo
可以返回很多有用的信息,例如函数的名称
,以及定义此函数的源代码中的第一行和最后一行编号。因此,您可以使用所有这些来编写解析器,以获得函数的确切主体。参见相关示例
local function print_func(func)
local addr = tostring(func):match'%X(%x+)%X*$'
local info, params = debug.getinfo(func, 'u'), {}
for i = 1, info.nparams do
params[i] = debug.getlocal(func, i)
end
if info.isvararg then
params[#params+1] = '...'
end
print('function@'..addr..'('..table.concat(params, ', ')..')')
end
local function example(x, y) return x+y end
print(print) --> function: 000007FEE30B6900
print(example) --> function: 00000000005CEFD0
print_func(print) --> function@000007FEE30B6900(...)
print_func(example) --> function@00000000005CEFD0(x, y)