Как я могу получить имя функции по указателю в Lua? - PullRequest
1 голос
/ 15 января 2012

В Lua я создал симпатичный принтер для своих таблиц / объектов. Однако когда отображается функция, она отображается в виде указателя.

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

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

Ответы [ 2 ]

4 голосов
/ 15 января 2012

при создании функций зарегистрируйте их в таблице, используя их в качестве ключей.

local tableNames = {}

function registerFunction(f, name)
  tableNames[f] = name
end

function getFunctionName(f)
  return tableNames[f]
end

...
function foo()
  ..
end
registerFunction(foo, "foo")
...

getFunctionName(foo) -- will return "foo"
1 голос
/ 17 января 2012

Почему-то кажется, что он работает только с числовыми параметрами (то есть с активными функциями в стеке).

Сценарий

function a() return debug.getinfo(1,'n') end
function prettyinfo(info) 
    for k,v in pairs(info) do print(k,v) end
end
prettyinfo(a())

печать

name    a
namewhat    global

но если я изменю последнюю строку на

prettyinfo(debug.getinfo(a, 'n'))

это дает мне только пустую строку:

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