代码之家  ›  专栏  ›  技术社区  ›  kikito

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

lua
  •  2
  • kikito  · 技术社区  · 15 年前

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

    我想知道Lua是否有一种方法可以从函数外部知道函数所取参数的名称。

    例如,在Lua中有没有一种方法可以做到这一点?

    function foo(x,y)
      ... -- any code here
    end
    
    print( something ... foo ... something)
    -- expected output: "x", "y"
    

    谢谢。

    4 回复  |  直到 10 年前
        1
  •  3
  •   Judge Maygarden    15 年前

    看一看 debug.getinfo ,但您可能需要此任务的分析器。我不知道如何从Lua中获取函数的参数,而不需要实际运行函数并检查其环境表(请参见 debug.debug debug.getlocal )

        2
  •  4
  •   lhf    15 年前

    试试我的 bytecode inspector library . 在Lua 5.2中,您可以使用 debug.getlocal .

        3
  •  4
  •   Mike Laren aary trivedi    10 年前

    好的,下面是核心代码:

    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))
    
        4
  •  1
  •   RBerteig Keith Adler    15 年前

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