سؤال
وأواجه صعوبة تذكر مع الإغلاق وأود أن أعرف ما سيكون رمز يعادل لإجراء المكياج الأفعى الكنسي أن يكون في روبي.
في مخطط سيكون مثل:
(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
نصائح أخرى
وفارق واحد هو أنه في حين أن برنامج واحد فقط النوع من الإجراء، روبي أربعة. في معظم الوقت، فإنها تتصرف بالمثل بما فيه الكفاية لامدا المعيار الخاص بك، ولكن عليك أن تحاول <لأ href = "http://innig.net/software/ruby/closures-in-ruby.rb" يختلط = "نوفولو noreferrer" > فهم كل التفاصيل في عمق .
وهنا طريقة أخرى للقيام بذلك في 1.9:
make_adder = -> n, x { n + x }
hundred_adder = make_adder.curry[100]
hundred_adder[4] # => 104
وهنا هو لطيف جدا شاشة الصب شرح كتل والإغلاق في روبي: http://www.teachmetocode.com/screencasts/8
لا تنتمي إلى StackOverflow