【问题标题】:Are there any "simple" explanations of what procs and lambdas are in Ruby?对 Ruby 中的 procs 和 lambdas 有什么“简单”的解释吗?
【发布时间】:2009-11-16 08:57:09
【问题描述】:

对于 Ruby 中的 procs 和 lambdas 有什么“简单”的解释吗?

【问题讨论】:

    标签: ruby lambda proc-object


    【解决方案1】:

    Lambda(也存在于其他语言中)类似于临时函数,仅为简单用途而非执行某些复杂操作而创建。

    当您使用像 Array#collect 这样在 {} 中获取块的方法时,您实际上是在创建一个仅用于该方法的 lambda/proc/block。

    a = [1, 2, 3, 4]
    # Using a proc that returns its argument squared
    # Array#collect runs the block for each item in the array.
    a.collect {|n| n**2 } # => [1, 4, 9, 16]
    sq = lambda {|n| n**2 } # Storing the lambda to use it later...
    sq.call 4 # => 16
    

    请参阅 Wikipedia 上的 Anonymous functions,以及一些 other SO questions,了解 lambdaProc 的细微差别。

    【讨论】:

    • 在上面的例子中,它仍然可以在没有 lambda 的情况下完成。与块为主体的 for next 循环不一样吗?我只是想看看使用积木的好处。
    • 当然你可以用 for 循环来做,但这是一种更优雅和 Ruby 风格的方法。其他方法可能更难用循环复制。
    • 好的,我想知道我可以用 Lambdas 和 Procs 做些什么会很有用,否则会太冗长,也许有一个例子。
    • 这本身就是一个例子。没有,它将是aa=[]; for i in 0...(a.length); aa<<a[i]**2; end; aa
    • 好的,谢谢,这是一个很好的例子。所以它使代码更清晰。谢谢
    猜你喜欢
    • 2014-12-23
    • 1970-01-01
    • 2012-07-21
    • 1970-01-01
    • 2015-08-04
    • 2013-03-11
    • 1970-01-01
    • 1970-01-01
    • 2012-07-19
    相关资源
    最近更新 更多