2013-10-15 107 views
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 

如果有人能帮助我,我将感谢。如果我还不清楚,告诉我,我会尽力更好地描述它。我有限的英语的借口。

+3

目前尚不清楚你想要达到的目标。试着用简单的话来描述你的代码应该做什么。你发布的片段太有限了,而且,还有一些语法问题,正如@solarbear已经指出的那样。你得到的错误是什么? –

+2

@ user2884099 Lua对bool文字使用关键字'true'和'false' - 注意这种情况。 – greatwolf

+0

@LorenzoDonati - OP似乎想要实时获取当前函数的名称(在这种情况下为“Test123”)。 –

回答

0

您的函数声明缺少end

function Test123() 
end 

阅读the Lua manual的功能章节。为了记录,您的if也需要end

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

阅读原因:我不会为性能密集型任务建议此解决方案。字符串匹配和追踪都不适合这个。另外,显然必须启用调试库,以便实际使用追踪功能。

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