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))
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))
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
Ecco un bel cast screen che spiega blocchi e chiusure in Ruby: http://www.teachmetocode.com/screencasts/8
darò un'occhiata al video, grazie – burlsm
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.
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
Grazie mille, che ha spianato i miei dubbi. – burlsm