在lua中评估函数参数中的代码块

时间:2012-04-16 13:33:11

标签: lambda lua anonymous-function

我不确定如何标题,但请考虑以下lua代码:

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

但是这只打印了函数地址,因为function()返回一个闭包。有没有办法评估匿名函数?就像我可以在附加括号中使用lambda的方案一样?

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

当然我知道,我可以事先定义这个函数并稍后调用它,但我很好奇是否可以在lua中使用它。提前致谢所有回复。

2 个答案:

答案 0 :(得分:14)

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

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

给出以下输出

> 12345678910

答案 1 :(得分:4)

如果这是您想要的全局行为,最简单的解决方案是挂钩打印,以便评估传递给它的任何函数。这样你就可以简单地将呼叫站点保留为lambda。