Lua:如何从_G中提取函数?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Lua:如何从_G中提取函数?相关的知识,希望对你有一定的参考价值。

目前我正在尝试显示存储在_G中的所有内容。在_G中读写表格非常简单。

有谁知道如何对类型函数做同样的事情?

我的目标是返回一个包含存储在_G表中的函数的字符串。

干杯谢谢马克斯

答案

您可以获得的关于函数的唯一信息是其参数的名称(除非调试信息被剥离)。

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)

附:在某些语言(例如,Smalltalk)中,函数对象将其源代码作为其属性公开。

另一答案

要显示_G中的所有内容,您可以这样做:

for n in pairs(_G) do print(n) end

如果你只想获得type函数:

 for n in pairs(_G) do 
     if n=="type" then
         print(n) 
     end
 end

你可以检查上面的here的输出

以上是关于Lua:如何从_G中提取函数?的主要内容,如果未能解决你的问题,请参考以下文章

使用从循环内的代码片段中提取的函数避免代码冗余/计算开销

lua如何从字符串提取某一个字符

Lua的API函数

Lua笔记——4.环境Environment

lua中怎么捕获错误异常信息

如何从 lua 数组中提取值?