2009-11-28 15 views
12

Ho un po 'di problemi con chiusure e vorrei sapere che cosa il codice equivalente per la procedura canonica per acquirente sarebbe in Ruby.Chiusure in rubino

Nello schema sarebbe come:

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

risposta

17

In realtà è molto vicino ...

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

In 1.9 è possibile utilizzare ...

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

Grazie mille, che ha spianato i miei dubbi. – burlsm

3

Una differenza è che mentre Scheme ha solo un tipo di procedura, Ruby ne ha quattro. Il più delle volte, si comportano in modo simile al tuo lambda standard, ma dovresti provare a understand all the details in depth.

2

Ecco un altro modo per farlo in 1.9:

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