روبي metaprogramming - كتلة العائد لا تعمل في طريقة إضافتها بشكل حيوي

StackOverflow https://stackoverflow.com/questions/1604776

سؤال

وأنا أعمل على تمديد NotAMock إطار لالإستئصال الأساليب في rspec، و الحصول على بذرة الاستسلام لكتلة الأساليب.

التعليمات البرمجية في هذا جست يعمل تماما عندما كنت رمز ذلك في بلدي (التي تتم المتابعة لتشبه كيف NotAMock طرق بذرة).

ولكن عندما تدمج object.instance_eval ... الشفرة في إطار NotAMock، و "block_given؟" يعود دائما كاذبة وأنا لا يمكن أبدا أن أحصل على العائد للعمل بسبب ذلك. يضاف الطريقة بشكل صحيح، وأستطيع أن استدعاء الأسلوب فافات ... لكنها لن تعترف كتلة أنني تمريرها إلى الأسلوب من NotAMock فافات الإصدار.

لنرى كيف لقد أدرجت هذه الشفرة في إطار NotAMock، انتقل إلى بلدي نسخة من NotAMock والتحقق من "add_hook" طريقة في أساليب خاصة.

وأنا أعلم أن هذا هو الشيء الكثير لنسأل ... أنا على أمل العثور على بعض التوجيهات. انه تم يقود لي المكسرات طوال اليوم.

هل كانت مفيدة؟

المحلول 2

وتبين أن المسألة لا علاقة لها رمز أنني مرتبط ... في إطار NotAMock تقوم بعمل بعض طريقة إعادة تعريف إضافية الذي يسبب قضية بلدي. لقد ضاقت هذه القضية وصولا الى خط واحد محدد من التعليمات البرمجية، وأعمل على كيفية إصلاح ذلك الآن.

نصائح أخرى

وأنا لست متأكدا حتى هذا ممكن. Procs الجديدة لا تعترف حتى كتل.

proc = Proc.new do
  if block_given?
    yield
  else
    puts "Not in a block"
  end
end

proc.call { puts "In a block"} # => puts Not in a block

ويفترض روبي 1.9 للسماح للكتل لاتخاذ وكتلة كمعلمات. ولكن أنا لا أعرف إذا كان من شأنها أن تعمل أو حتى إذا كان سيسمح كتل المشروطة.

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