Latest web development tutorials

وحدة روبي (وحدة)

وحدة (وحدة) هي وسيلة لطرق، والطبقات، والثوابت مجتمعة الطريقة. وحدة (وحدة) يوفر لك مع اثنين من الفوائد.

  • توفر وحداتمساحة اسمومنع الصراعات الاسم.
  • وحدة تنفذ الأجهزة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.
  • حتى تستطيع أن ترى أن عينة الفئة يرث وحدتين، يمكنك أن تقول عينة من الدرجة استخدام وراثة متعددة أوmixin.