如何获取该功能的名称

时间:2012-03-16 20:14:21

标签: function lua

我有问题。如何在不使用调试命名空间的情况下知道调用我的函数的函数的名称。例如:

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 个答案:

答案 0 :(得分:2)

功能没有名称。函数是Lua中的值,就像数字5.23或字符串"string"一样。这些是价值观,它们可以存储在很多地方。因此,函数没有实名。 Debug系统根据它们最初声明的方式来分配函数名称,但这就是它。

如果一个函数需要知道是谁调用它,那么该函数有责任将调用者作为函数参数。

答案 1 :(得分:0)

这不能解决您问题的一半,但可以使用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)