lua - получить список имен параметров функции извне функции - PullRequest
2 голосов
/ 23 июня 2010

Я создаю некоторую (не HTML) документацию для библиотеки Lua, которую я разработал. Я сгенерирую документацию вручную, но я буду признателен за некоторую автоматизацию, если это возможно (т.е. создание скелетов для каждой функции, чтобы я мог их заполнить)

Я хотел бы знать, есть ли способ для lua узнать имена параметров, которые принимает функция извне.

Например, есть ли способ сделать это в Lua?

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

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

Большое спасибо.

Ответы [ 4 ]

4 голосов
/ 25 марта 2015

хорошо, вот основной код:

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 голосов
/ 23 июня 2010

Попробуйте мою библиотеку инспектора байт-кода . В Lua 5.2 вы сможете использовать debug.getlocal.

3 голосов
/ 23 июня 2010

Взгляните на debug.getinfo, но вам, вероятно, нужен парсер для этой задачи. Я не знаю ни одного способа получения параметров функции из Lua без фактического запуска функции и проверки ее таблицы окружения (см debug.debug и debug.getlocal) .

1 голос
/ 23 июня 2010

Посмотрите на утилиту luadoc . Это похоже на Doxygen, но для Lua. Он предназначен для того, чтобы документация могла быть написана в соответствии с исходным кодом, но она, безусловно, могла бы использоваться для создания шаблона структуры документации, который должен быть отдельно представлен. Конечно, механизм шаблонов оставит вас с проблемой обслуживания в будущем ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...