سؤال

وكنت أبحث في هذا السطر:

    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، مما يجعل رمز أكثر قابلية للقراءة.

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