【问题标题】:Evaluate code block in a function parameter in lua在lua中评估函数参数中的代码块
【发布时间】:2012-04-16 13:33:10
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: lambda lua anonymous-function


    【解决方案1】:

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

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

    给出以下输出

    > 12345678910
    

    【讨论】:

    • 谢谢,我有类似的想法,但我没有将函数括在括号中。看起来比方案更难看,但至少它有效:D
    【解决方案2】:

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

    【讨论】:

    • 有趣的可能性,我刚学lua,不知道你能做到。我会记住的
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-01
    • 2013-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多