سؤال
كيف روبي يسمح فئة طرق الوصول خارج الطبقة ضمنا ؟
على سبيل المثال:
class Candy
def land
homer
end
end
def homer
puts "Hello"
end
Candy.new.land #Outputs Hello
المحلول
وتعريف طريقة "هوميروس" يضيف طريقة لفئة كائن. انها ليست تحديد وظيفة خالية.
وكاندي الدرجة يرث ضمنا من وجوه، وذلك لديه حق الوصول إلى أساليب في كائن. عند استدعاء "هوميروس" في طريقة "الأرض"، القرار طريقة لا يمكن العثور على التعريف الوارد في الفصل الحالي، ويذهب إلى الطبقة السوبر، يجد طريقة قمت بإضافتها إلى كائن، ويسميها.
نصائح أخرى
طريقة بسيطة لمعرفة ما يحدث
ما فئات/وحدات البحث لحل الأساليب المستخدمة في الحلوى الكائنات ؟
p الحلوى.أسلاف #=> [حلوى, موضوع, Kernel]
هل الحلوى لديك طريقة تسمى هوميروس ؟
p الحلوى.instance_methods(كاذبة).البقرى("هوميروس") #=> []
p الحلوى.private_instance_methods(كاذبة).البقرى("هوميروس") #=> []
طيب الحلوى ليس لديه أي طريقة تسمى 'هوميروس'.
ما هي الخطوة التالية في البحث سلسلة (انظر 1) => "كائن"
لا وجوه لها طريقة تسمى "هوميروس" ?p الكائن.instance_methods(كاذبة).البقرى("هوميروس") #=> []
p الكائن.private_instance_methods(كاذبة).البقرى("هوميروس") #=> ["هوميروس"]
وقد الحلوى الكائن في البحث سلسلة والتي بدورها خاص سبيل المثال طريقة "هوميروس" حتى طريقة القرار ينجح
على مواطنه البيان دائما يحدد الأسلوب في فئة ما النفس هو في نقطة تعريف
ما هو النفس قبل هوميروس هو تعريفها ؟
p النفس #=> الرئيسية مواطنه هوميروس يضع "مرحبا" نهاية
فما هو نوع ؟
p self.class #=> Object
وهذا هو السبب هوميروس ينتهي على وجوه
من الناحية الفنية, تعريف homer
الأسلوب هو في الواقع على Kernel
الوحدة التي هي مختلطة في Object
, وليس على Object
مباشرة.لذلك عندما homer
لا متغير محلي أو مثيل طريقة تعريف على Candy
, ، طريقة روبي الميراث سلسلة متابعتها من خلال Object
ثم مختلط في Kernel
وحدة ثم هذا الرمز هو تشغيل.
تحرير: آسف, أنا لا أعرف لماذا فكرت في هذا.ويبدو أن الأسلوب حقا يعيش على Object
.غير متأكد يجعل الكثير من الفرق في الممارسة ولكن يجب أن أكدت الأشياء قبل النشر.
وروبي لا يوجد لديه وظائف التعويم الحر. كل أسلوب ينتمي إلى بعض وجوه. الطرق التي def
على أعلى مستوى أصبحت فعلا أساليب مثيل Object
الصف. لأن كل شيء هو Object
على مستوى ما، كل الأشياء لها الحصول على وسائل المثال Object
ل.