سؤال

لقد صادفت اليوم بناء جملة Ruby Strange في معقول صف دراسي:

Rational(a,b)

(لاحظ عدم وجود .new()الجزء مقارنة مع بناء جملة Ruby العادي). ماذا يعني هذا ، على وجه التحديد ، بالمقارنة مع الطبيعي new بناء الجملة؟ الأهم من ذلك ، كيف يمكنني تنفيذ شيء مثل هذا في الكود الخاص بي ، ولماذا أقوم بتنفيذ شيء كهذا؟ على وجه التحديد ل Rational الفئة ، لماذا يتم استخدام هذا الجملة بدلاً من الاستئصال العادي؟ ولماذا new طريقة خاصة في الطبقة العقلانية؟ (وكيف/لماذا أفعل هذا في رمز الياقوت الخاص بي؟) شكرًا مقدمًا على إجاباتك ، خاصة وأنني طرحت العديد من الأسئلة.

هل كانت مفيدة؟

المحلول

كل ما عليك فعله هو إعلان وظيفة عالمية تحمل نفس الاسم مثل صفك. وهذا ما يفعله Rational.RB:

def Rational(a, b = 1)
  if a.kind_of?(Rational) && b == 1
    a
  else
    Rational.reduce(a, b)
  end
end

لجعل المنشئ خاصًا:

private :initialize

وبالمثل ل new طريقة:

private_class_method :new

أفترض Rational.new يمكن أن تبقى علنية وجعلها لفعل ما Rational() لا ، ولكن وجود طريقة تحول حججها إلى حالات تتفق معها Array(), String(), ، إلخ. إنه نمط مألوف يسهل تنفيذه وفهمه.

نصائح أخرى

الطريقة العقلانية () هي في الواقع طريقة مثيل محددة الخارج من الطبقة العقلانية. وبالتالي ، يصبح طريقة مثيل لأي كائن يقوم بتحميل المكتبة "عقلانية" (عادةً ما يكون: كائن) بنفس الطريقة التي "يضعها" ، على سبيل المثال.

من خلال الاتفاقية ، عادة ما تكون هذه الطريقة مُنشئًا لفئة الاسم نفسه.

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