سؤال
وكنت أبحث في هذا السطر:
extensions << Module.new(&block) if block_given?
ويبدو لإنشاء وحدة جديدة وإضافتها إلى arry.
وماذا كنت إنشاء وحدة نمطية من كتلة على الرغم من؟ كتلة يمكن أن يكون أي شيء وبعد ذلك مجموعة ملحقات يصبح لا يمكن التنبؤ بها.
وتحرير: هذا هو من الفئة الأساسية سيناترا:
def register(*extensions, &block)
extensions << Module.new(&block) if block_given?
extensions.each do |extension|
extend extension
extension.registered(self) if extension.respond_to?(:registered)
end
end
المحلول
والتعليمات البرمجية في كتلة لا أكثر "لا يمكن التنبؤ بها" من التعليمات البرمجية في وحدة نمطية يتم دون استخدام كتلة. سواء أنا أكتب
module Foo
def foo() "bar" end
end
أو
Foo = Module.new do
def foo() "bar" end
end
وأحصل على نفس التأثير. كلا تسمح لك لتوسيع وظائف فئة أخرى، والذي هو الغرض من هذا الأسلوب.
نصائح أخرى
في هذه الحالة فإنه يسمح لك لتمرير ومنع داخل oneliner، مما يجعل رمز أكثر قابلية للقراءة.
لا تنتمي إلى StackOverflow