2012-04-16 62 views
9

我真的不知道如何标题的问题,但考虑以下Lua代码:评估代码块中的函数参数LUA

print(function() 
    s = "" 
    for i = 1, 10 do 
     s = s..tostring(i) 
    end 
    return s 
    end) 

但这仅打印功能的地址,因为函数()返回一个闭包。有没有办法评估匿名函数?像在我可以在另外的括号中拥抱lambda的计划一样?

((lambda()(display "Hello World"))) 

当然,我知道,我可以预先定义的功能,过一会儿给它,但我只是好奇,如果这是可能的LUA。预先感谢所有回复。

回答

14

您需要将函数定义放在括号中,然后通过在后面添加()来调用它。在Lua解释把这个:

> print((function() 
    s="" 
    for i=1,10 do 
     s=s..tostring(i) 
    end 
    return s 
    end)()) 

给出了下面的输出

> 12345678910 
+0

谢谢,我有一个类似的想法,但我没有包装在括号中的功能。看起来比方案更丑陋一点,但至少它工作:D – Moe 2012-04-16 14:29:28

4

如果这是你想要一个全球性的行为,最简单的解决办法是挂钩的打印,这样它的计算结果传递给任何功能它。这样,您可以简单地将呼叫站点保存为lambda表达式。

+0

interessting possiblelity,我只是在学习卢阿,并不知道你可以做到这一点。我会记住它 – Moe 2012-04-16 18:46:46