سؤال

عندما أكتب هذا:

puts 'repeat' * 3

انا حصلت:

>> repeat repeat repeat

لكن الأمر لا يعمل إذا قمت بذلك:

puts 3 * 'repeat'

لماذا ا؟

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

المحلول

في روبي ، عندما تتصل a * b, ، أنت في الواقع تدعو طريقة تسمى * تشغيل a. جرب هذا ، على سبيل المثال:

a = 5
=> 5
b = 6
=> 6
a.*(b)
=> 30

c = "hello"
=> "hello"
c.*(a)
=> "hellohellohellohellohello"

هكذا <String> * <Fixnum> يعمل بشكل جيد ، لأن ال * طريقة على String يفهم كيفية التعامل مع الأعداد الصحيحة. يستجيب عن طريق تسلسل عدد من النسخ نفسها معًا.

ولكن عندما تفعل 3 * "repeat", ، إنه يستدعي * تشغيل Fixnum مع String جدال. هذا لا يعمل ، لأن Fixnum* تتوقع الطريقة رؤية نوع رقمي آخر.

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