سؤال

وأواجه صعوبة تذكر مع الإغلاق وأود أن أعرف ما سيكون رمز يعادل لإجراء المكياج الأفعى الكنسي أن يكون في روبي.

في مخطط سيكون مثل:

(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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top