调用函数名。

作为 Lua 初学者,如果这个问题的答案很简单,我很抱歉。 我尝试在代码中调用一个函数,但经过两个小时的搜索,我找不到想要的结果。(也许我使用了错误的搜索词?)

代码示例

function Test123 ()
    SayTest = True
    if SayTest = True then
        -- 这是我想要调用函数名 Test123 的地方,
        -- 但我似乎无法成功,因为它只是
        -- 开始了一个新函数
        SystemNotice ( role, function)
    end
end

这应该是结果:

function Test123 ()
    SayTest = True
    if SayTest = True then
        SystemNotice ( role, 'Test123')
    end
end

如果有人能帮助我,我会很感激。如果我还是不清楚,请告诉我,我会尽力更好地描述它。对于我的有限英语,我表示歉意。

点赞
用户20043
用户20043

你的函数声明缺少 end

function Test123 ()
end

Lua手册阅读函数章节。仅供参考,你的if也需要一个end

2013-10-15 20:51:08
用户1244588
用户1244588

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

阅读此文: 我不建议对于对性能要求高的任务使用此解决方案。字符串匹配和回溯都不适用于这种情况。此外,显然必须启用 debug 库才能使用回溯函数。

2013-10-16 14:39:10
用户513763
用户513763

这一构造违反了 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-17 08:09:12