【问题标题】:Closures in RubyRuby 中的闭包
【发布时间】:2009-11-28 06:18:55
【问题描述】:

我在关闭时遇到了一点问题,我想知道是什么 规范的 make-adder 过程的等效代码将在 红宝石。

在方案中会是这样的:

(define (make-adder n)
 (lambda (x) (+ x n))

【问题讨论】:

    标签: ruby closures


    【解决方案1】:

    其实很接近了……

    def make_addr n
      lambda { |x| x + n }
    end
    t = make_addr 100
    t.call 1
    101
    

    在 1.9 中,您可以使用...

    def make_addr n
      ->(x) { x + n }
    end
    

    【讨论】:

      【解决方案2】:

      一个区别是Scheme只有一种过程,而Ruby有四种。大多数时候,它们的行为与您的标准 lambda 足够相似,但您应该尝试understand all the details in depth

      【讨论】:

        【解决方案3】:

        这是 1.9 中的另一种方法:

        make_adder = -> n, x { n + x }
        hundred_adder = make_adder.curry[100]
        hundred_adder[4] # => 104
        

        【讨论】:

          【解决方案4】:

          这是一个非常漂亮的屏幕录像,解释了 Ruby 中的块和闭包: http://www.teachmetocode.com/screencasts/8

          【讨论】:

            猜你喜欢
            • 2010-09-06
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-05-25
            • 1970-01-01
            • 2017-10-17
            • 1970-01-01
            相关资源
            最近更新 更多