作为Lua的初学者,如果答案很简单,我很抱歉。 我试图在代码中调用一个函数,但经过2个小时的搜索后,我找不到想要的结果。 (也许我使用了错误的搜索查询?)
示例代码
function Test123 ()
SayTest = True
if SayTest = True then
-- This Is where I want to call the function name Test123,
-- yet I can't seem to succeed in this since it is just
-- starting a new function
SystemNotice ( role, function)
end
end
这应该是结果:
function Test123 ()
SayTest = True
if SayTest = True then
SystemNotice ( role, 'Test123')
end
end
如果有人能帮助我,我会很感激。如果我仍然不清楚,请告诉我,我会尝试更好地描述它。我的借口是我有限的英语。
答案 0 :(得分:2)
在Lua中,函数实际上是值。这意味着它们实际上没有名称,您只能将它们分配给变量或表字段,但由于值本身没有名称的概念,因此无法检索它。
也就是说,使用debug
库,您可以这样做:
function getfname()
return debug.traceback("", 2):match("in function '(.-)'");
end
function bar()
print(getfname())
end
bar(); -- prints bar
foo = bar;
foo() -- prints foo
knerf = {rab = bar};
knerf.rab() -- prints rab
请注意,这仅适用于默认的Lua错误处理程序或返回相同或非常相似的输出的处理程序,但是您可以明显地修改模式以满足您的需要。
阅读本文:我不建议此解决方案执行性能密集型任务。字符串匹配和回溯都不适合这个。此外,显然必须启用调试库,以便您可以实际使用回溯功能。
答案 1 :(得分:0)
答案 2 :(得分:0)
这是一种违背Lua哲学的结构,即功能是一等公民: 函数只是另一个值,因此它没有名称。
可以为变量赋值,从而将函数绑定到名称。 但这个名字可以改变。或者一个函数可以有多个名称。哪一个选择?
更好的解决方案是使用upvalue(闭包)创建一个匿名函数:
function genTest(name)
return function()
SayTest = true
if SayTest == true then
print ( 'role', name)
end
end
end
Test123 = genTest('Test123')
Test123()
foobar = Test123
foobar()
这将创建一个带有绑定局部变量名称的函数(请参阅PiL 6.1)。