调用函数名称

时间:2013-10-15 20:34:34

标签: function lua call

作为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

如果有人能帮助我,我会很感激。如果我仍然不清楚,请告诉我,我会尝试更好地描述它。我的借口是我有限的英语。

3 个答案:

答案 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)

您的函数声明缺少end

function Test123 ()
end

阅读the Lua manual中的功能章节。仅供记录,您的if还需要end

答案 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)。