这样的事情:
function foo()
print( __func__ )
...
end
怎么做?
答案 0 :(得分:27)
#!/usr/bin/lua
local function myFunc()
print(debug.getinfo(1, "n").name);
end
myFunc()
答案 1 :(得分:10)
你做不到。在lua中,函数是第一类变量。所以他们没有名字。你不妨问“2的名字是什么”。仅仅因为某个变量被赋值,值'2'就不会使该变量成为名称2.同样,“someFunc”是一个变量 - 可能是其中之一 - 保存一个特定的函数。
答案 2 :(得分:4)
虽然我同意Ephraim's answer,但该代码并不总是报告与Chris Becke指出的相同的名称。将该功能分配给另一个变量时,“名称”将被更改。
这是另一种选择。它只是使用一个字符串来标识函数。此方法解决了更改名称问题,但引入了维护问题。该字符串需要与函数名称保持同步,以便将来重构。
function foo()
local __func__ = "foo"
print( __func__ )
--...
end
或者,如果函数的位置比名称更重要,则以下可能更好。它将为基于源和行号的函数命名。
function getfunctionlocation()
local w = debug.getinfo(2, "S")
return w.short_src..":"..w.linedefined
end
function foo()
print(getfunctionlocation()) --> foo.lua:6
--...
end
如果__func__
似乎仍然更好,标准Lua并不重要,那么Lua解析器可以在this example for __FILE__
and __LINE__
中进行修改。
答案 3 :(得分:4)
function __FILE__() return debug.getinfo(2, 'S').source end
function __LINE__() return debug.getinfo(2, 'l').currentline end
function __FUNC__() return debug.getinfo(2, 'n').name end
function printlinefilefunc()
print("Line at "..__LINE__()..", FILE at "..__FILE__()..", in func: "..__FUNC__())
end
输出:
第8行,FILE在@。/ andydebug.lua,在func:printlinefilefunc
答案 4 :(得分:3)
使用Debug Library。它提供了一个getinfo(func)
函数,它返回一个包含函数信息的表。
答案 5 :(得分:3)
功能不一定拥有它们。在Lua中创建没有名称的匿名函数并调用它是完全合法的,而不是指定它。
(function()
print("in anonymous function!")
end)()
完全有效的Lua。你想用什么名字给这个功能?