2009-11-28 24 views
12

我在與關閉了一點小麻煩,我想知道是什麼 爲規範化妝加法過程將是 的Ruby等價代碼。閉包在Ruby中

在方案它會像:

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

回答

17

這其實很接近......

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 
+0

非常感謝,這使我不再懷疑。 – burlsm

3

一個區別是,雖然Scheme只有一種過程,但Ruby有四種。大多數情況下,它們的行爲與標準lambda相似,但您應該嘗試understand all the details in depth

2

這裏的另一種方式做到這一點在1.9:

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