【发布时间】:2009-11-28 06:18:55
【问题描述】:
我在关闭时遇到了一点问题,我想知道是什么 规范的 make-adder 过程的等效代码将在 红宝石。
在方案中会是这样的:
(define (make-adder n)
(lambda (x) (+ x n))
【问题讨论】:
我在关闭时遇到了一点问题,我想知道是什么 规范的 make-adder 过程的等效代码将在 红宝石。
在方案中会是这样的:
(define (make-adder n)
(lambda (x) (+ x n))
【问题讨论】:
其实很接近了……
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
【讨论】:
一个区别是Scheme只有一种过程,而Ruby有四种。大多数时候,它们的行为与您的标准 lambda 足够相似,但您应该尝试understand all the details in depth。
【讨论】:
这是 1.9 中的另一种方法:
make_adder = -> n, x { n + x }
hundred_adder = make_adder.curry[100]
hundred_adder[4] # => 104
【讨论】:
这是一个非常漂亮的屏幕录像,解释了 Ruby 中的块和闭包: http://www.teachmetocode.com/screencasts/8
【讨论】: