9

我不太确定如何为问题命名,但请考虑以下 lua 代码:

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

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

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

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

4

2 回答 2

14

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

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

给出以下输出

> 12345678910
于 2012-04-16T14:20:44.117 回答
4

如果这是您想要的全局行为,最简单的解决方案是挂钩 print 以便它评估传递给它的任何函数。这样,您可以简单地将调用站点保留为 lambdas。

于 2012-04-16T18:06:54.113 回答