Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Lua:如何从G中提取函数?_Lua - Fatal编程技术网

Lua:如何从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 您可以

目前,我正在尝试显示存储在_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

您可以检查上面的输出

有关函数的唯一信息是其参数的名称(除非删除调试信息)


注意:在某些语言(如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)