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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/288.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-从函数外部获取函数的参数名列表_Lua - Fatal编程技术网

lua-从函数外部获取函数的参数名列表

lua-从函数外部获取函数的参数名列表,lua,Lua,我正在为我开发的Lua库生成一些(非html)文档。我将手工生成文档,但如果可能的话,我希望能够实现某种自动化(即为每个函数生成框架,以便我可以填充它们) 我想知道lua是否有办法从函数外部知道函数所取参数的名称 例如,在Lua中是否有这样做的方法 function foo(x,y) ... -- any code here end print( something ... foo ... something) -- expected output: "x", "y" 非常感谢。看一下,

我正在为我开发的Lua库生成一些(非html)文档。我将手工生成文档,但如果可能的话,我希望能够实现某种自动化(即为每个函数生成框架,以便我可以填充它们)

我想知道lua是否有办法从函数外部知道函数所取参数的名称

例如,在Lua中是否有这样做的方法

function foo(x,y)
  ... -- any code here
end

print( something ... foo ... something)
-- expected output: "x", "y"

非常感谢。

看一下,但是您可能需要一个解析器来完成此任务。在没有实际运行函数并检查其环境表的情况下,我不知道如何从Lua中获取函数的参数(请参见和)。

查看该实用程序。这有点像强力剂,但对Lua来说。它的目的是允许文档按照源代码编写,但它当然可以用于生成文档结构的模板,以便单独充实。当然,模板机制会给您留下一个维护问题…

试试我的。在Lua5.2中,您将能够使用
debug.getlocal

好的,下面是核心代码:

function getArgs(fun)
local args = {}
local hook = debug.gethook()

local argHook = function( ... )
    local info = debug.getinfo(3)
    if 'pcall' ~= info.name then return end

    for i = 1, math.huge do
        local name, value = debug.getlocal(2, i)
        if '(*temporary)' == name then
            debug.sethook(hook)
            error('')
            return
        end
        table.insert(args,name)
    end
end

debug.sethook(argHook, "c")
pcall(fun)

return args
end
您可以这样使用:

print(getArgs(fun))

谢谢这些应该是指向某个地方的链接吗?是的,它们是指向联机Lua参考手册的相应部分的链接。我将尝试使用debug.getinfo。谢谢我在
luadoc
方面的经验很差。相反,我一直在以模块内的元数据形式编写文档。对于海报的问题,我认为lhf的答案是肯定的。Luadoc是,嗯,古怪的。Lua不容易获得函数的良好文档签名,luadoc的大部分怪癖都与此相关。我在用C编写的Lua库文档中遇到了相关问题,因为所有Lua可调用函数都具有相同的不透明签名,所以Doxygen根本帮不上忙。@Norman Ramsey:我想了解更多关于您所说的“模块中的metatada”。你有任何样本/文档吗?@Norman Ramsey:我对此提出了一个不同的问题:我想我现在将继续使用lua的调试功能。但是谢谢你的回答。我认为这对其他人发现这个问题很有用。