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

У меня проблема.Как узнать имя функции, вызвавшей мою функцию, без использования пространства имен отладки.Например:

function test1()
   test2()
end

function test2()
   --How to get here name of function which have called my function test2.
   --How to get here "test1"?
end

Будет легко, если мне разрешат использовать пространство имен отладки, но я смогу использовать.У кого-нибудь есть идеи?Извините за мой английский.

Ответы [ 2 ]

2 голосов
/ 17 марта 2012

Функции не имеют имен. Функции - это значения в Lua, такие как число 5.23 или строка "string". Это ценности, и они могут храниться во многих местах. Следовательно, для функции нет реального имени. Система отладки назначает имена функций в зависимости от того, как они были первоначально объявлены, но это все.

Если функция должна знать, кто ее вызвал, то эта функция несет ответственность за принятие вызывающей стороны в качестве параметра функции.

0 голосов
/ 19 марта 2012

Это не решит половину вашей проблемы, но вы можете дать имена своим функциям с помощью FuncTables . Можете ли вы использовать это, чтобы помочь решить вашу проблему, я не знаю.

-- create a functable --

functable = {name = "bob"}
metatable = {}

metatable.__call = function()
    print "you just called a table!"
end

setmetatable(functable,metatable)

-- call a functable and get it's name --

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