0

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

如果有人可以帮助我,我将不胜感激。如果我仍然不清楚,请告诉我,我会尝试更好地描述它。我为我有限的英语找借口。

4

3 回答 3

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 错误处理程序或返回相同或非常相似输出的错误处理程序,但是您显然可以修改模式以满足您的需要。

阅读此内容:对于性能密集型任务,我不建议使用此解决方案。字符串匹配和回溯都不太适合这个。此外,显然必须启用调试库,以便您可以实际使用回溯功能。

于 2013-10-16T14:39:10.230 回答
0

您的函数声明缺少end.

function Test123 ()
end

阅读Lua 手册中的函数章节。仅作记录,您if还需要一个end.

于 2013-10-15T20:51:08.953 回答
0

这是一个与函数是一等公民的 Lua 哲学背道而驰的构造:函数只是另一个值,因此它没有名称。

可以为变量赋值,从而将函数绑定到名称。但这个名字是可以改变的。或者一个函数可以有多个名称。选哪一个?

更好的解决方案是创建一个带有上值(闭包)的匿名函数:

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

于 2013-10-17T08:09:12.477 回答