سؤال بناء جملة روبي: عقلاني (أ ، ب) وعقلانية. نيو! (أ ، ب)
-
26-09-2019 - |
سؤال
لقد صادفت اليوم بناء جملة 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()
, ، إلخ. إنه نمط مألوف يسهل تنفيذه وفهمه.
نصائح أخرى
الطريقة العقلانية () هي في الواقع طريقة مثيل محددة الخارج من الطبقة العقلانية. وبالتالي ، يصبح طريقة مثيل لأي كائن يقوم بتحميل المكتبة "عقلانية" (عادةً ما يكون: كائن) بنفس الطريقة التي "يضعها" ، على سبيل المثال.
من خلال الاتفاقية ، عادة ما تكون هذه الطريقة مُنشئًا لفئة الاسم نفسه.