المعامل ==‎ الخاص بالصنف Module في روبي

من موسوعة حسوب
< Ruby‏ | Module

يتحقق معامل التساوي == من تساوي كائنين.

البنية العامة

obj == other   true or false
equal?(other) true or false
eql?(other)   true or false

في مستوى الصنف Object، يعيد المعامل == القيمة true فقط إن كان obj و other نفس الكائن. بشكل عام، يٌعاد تعريف هذا التابع في الأصناف المنحدرة (descendant classes) لتخصيصه للصنف المُستخدم.

بخلاف المعامل ==، لا يجب أبدًا إعادة تعريف التابع equal?‎ في الأصناف الفرعية (subclasses)، لأنه يُستخدَم لتحديد هوية الكائن (أي أنّ a.equal?(b)‎ تعيد true إذا وفقط إذا كان a هو نفسه الكائن b).

يعيد التابع eql?‎ القيمة true إن كان للكائنين obj و other نفس مفتاح النوع Hash (أي hash key). ويُستخدم من قبل Hash لاختبار التساوي بين العناصر. بالنسبة للكائنات التي من الصنف Object، فإنّ eql?‎ مرادف للمعامل ==.

عادة ما تسير الأصناف الفرعية على هذا النهج عبر جعل eql?‎ اسمًا مرادفًا للمعامل == المٌعاد تعريفه، ولكن هناك استثناءات. تجري الأنواع العددية (Numeric)، على سبيل المثال، عمليات تحويل الأنواع عند استخدام ==، ولكن ليس عند استخدام eql?‎.

المعاملات

obj

الطرف الأول المراد التحقق من تساويه.

other‎

الطرف الثاني المراد التحقق من تساويه.

القيمة المعادة

تعاد القيمة true فقط إن كان obj و other نفس الكائن، وإلا فستُعاد القيمة false.

أمثلة

مثال على استخدام التابع ==‎:

obj = "a"
other = obj.dup
obj == other      #=> true
obj.equal? other  #=> false
obj.equal? obj    #=> true‎

1 == 1.0     #=> true
1.eql? 1.0   #=> false

انظر أيضا

  • المعامل ===: يعيد القيمة true إن كان الوسيط obj نسخة (instance ) من الوسيط mod أو من أحد الأصناف المنحدرة منه.
  • المعامل >: يعيد القيمة true إن كانت الوحدة Module التي تقع على يساره صنفًا فرعيًّا من الوحدة التي تقع على يمينه.
  • المعامل <=>: يجري عملية الموازنة بين كائنين ثم يعيد الناتج الذي يشير إلى العلاقة بينهما.

مصادر