وحدة روبي (وحدة)
وحدة (وحدة) هي وسيلة لطرق، والطبقات، والثوابت مجتمعة الطريقة. وحدة (وحدة) يوفر لك مع اثنين من الفوائد.
- توفر وحداتمساحة اسمومنع الصراعات الاسم.
- وحدة تنفذ الأجهزةmixin.
وحدة (وحدة) وتعرف مساحة اسم، أي ما يعادل رمل والأساليب والثوابت الخاصة بك ليست ثوابت وأساليب الصراع في أماكن أخرى في ذلك.
الوحدة النمطية للفئة مماثلة، ولكن مع نظرة مختلفة:
- وحدات لا يمكن مثيل
- الوحدة النمطية لا فرعية
- يمكن تعريف وحدة فقط من قبل وحدة أخرى
قواعد
module Identifier statement1 statement2 ........... end
وحدة اسمه الثوابت والثوابت فئة المسمى بالمثل، بدءا بحرف كبير. تعريف الأسلوب يشبه: نهج وحدات مماثلة لتحديد تعريفات أسلوب فئة.
من خلال أساليب الفئة، يمكنك وضع اسم الوحدة النمطية ونقطة أمام اسم الفئة من طريقة لاستدعاء نهج وحدات، يمكنك استخدام اسم وحدة واثنين من كولون إلى مرجع ثابت.
أمثلة
#!/usr/bin/ruby # 定义在 trig.rb 文件中的模块 module Trig PI = 3.141592654 def Trig.sin(x) # .. end def Trig.cos(x) # .. end end
يمكن أن نحدد وظائف متعددة مع نفس الاسم ولكن وحدات وظيفية مختلفة:
#!/usr/bin/ruby # 定义在 moral.rb 文件中的模块 module Moral VERY_BAD = 0 BAD = 1 def Moral.sin(badness) # ... end end
مثل أساليب الفئة، عند تعريف الأسلوب في وحدة نمطية، يمكنك تحديد اسم الوحدة النمطية تليها نقطة بعد نقطة جاءت من اسم الأسلوب.
تتطلبروبيبيان
تتطلب بيان يشبه C و C ++، وتتضمن عبارات في بيان استيراد جافا. إذا لم يتم تحديد برنامج طرف ثالث تريد استخدام أي من وحدات، يمكنك ببساطة استخدام تتطلبروبيبيان لتحميل ملف وحدة:
قواعد
require filename
هنا،.rb ملحق الملف غير مطلوب.
أمثلة
$ LOAD_PATH << '.' تتطلب "trig.rb" تتطلب "أخلاقية" ذ = Trig.sin (أوقف :: PI / 4) مخالفات = Moral.sin (المعنوي :: VERY_BAD)
هنا، ونحن نستخدم$ LOAD_PATH << '.' دعونا روبي نعلم أننا يجب البحث عن الملف المشار إليه في الدليل الحالي.إذا كنت لا تريد استخدام $ LOAD_PATH، يمكنك استخدامrequire_relative مرجع ملف من دليل النسبي.
ملاحظة: هنا، وملف يحتوي على نفس اسم وظيفة.لذلك، وهذا سوف يؤدي إلى التشويش عند الإشارة إلى برنامج الاستدعاء ولكن وحدات تجنب هذا التشويش الرمز، ويمكننا استخدام اسم الوحدة النمطية إلى استدعاء الدالة المناسبة.
تشملروبيبيان
يمكنك تضمين وحدة في الصف. من أجل تضمينها في وحدة الصف، يمكنك استخدامتتضمنعبارات في صفك:
قواعد
include modulename
إذا تم تعريف وحدة في ملف منفصل، وذلك قبل أن تحتاج إلى استخدام وحدة جزءا لا يتجزأتتطلبالبيانات المرجعية الملف.
أمثلة
وإذا افترضنا أن الوحدات التالية مكتوبة في ملفsupport.rb.
module Week FIRST_DAY = "Sunday" def Week.weeks_in_month puts "You have four weeks in a month" end def Week.weeks_in_year puts "You have 52 weeks in a year" end end
يمكنك الآن مرجع وحدة في الصف، على النحو التالي:
#!/usr/bin/ruby $LOAD_PATH << '.' require "support" class Decade include Week no_of_yrs=10 def no_of_months puts Week::FIRST_DAY number=10*12 puts number end end d1=Decade.new puts Week::FIRST_DAY Week.weeks_in_month Week.weeks_in_year d1.no_of_months
وهذا ينتج النتائج التالية:
Sunday You have four weeks in a month You have 52 weeks in a year Sunday 120
روبي في Mixins
قبل قراءة هذا القسم، سوف تحتاج إلى فهم أولي من المفاهيم وجوه المنحى.
عندما يمكن أن يكون فئة فئة أصل أكثر من واحد عندما يرث صنف ميزة من، يتم عرض الفئة كما وراثة متعددة.
روبي لا يعتمد مباشرة وراثة متعددة، ولكن وحدة روبي (الوحدة) وميزات أخرى رائعة. فإنه يلغي عمليا الحاجة إلى وراثة متعددة، وتقدم هناك جهازيسمى mixin.
روبي لا يحقق حقا آلية الميراث متعددة، ولكن كما اعتمدت التكنولوجيا mixin كبديل. وتشمل وحدات تعريف الفئة، ونهج وحدة لخلط في الصف.
دعونا ننظر في نموذج التعليمات البرمجية التالي، في العمق فهم mixin:
module A def a1 end def a2 end end module B def b1 end def b2 end end class Sample include A include B def s1 end end samp=Sample.new samp.a1 samp.a2 samp.b1 samp.b2 samp.s1
- وتتألف الوحدة من عملية A1 و A2.
- وحدة B من خلال طريقة B1 و B2 التكوين.
- تحتوي الطبقة عينة وحدات A و B.
- الطبقة عينة يمكن الوصول إلى كافة الطرق الأربعة، وهي: A1، A2، B1 و B2.