لماذا لا "كرر" * 3` نفس "3 *" كرر "` في روبي؟
-
23-09-2019 - |
سؤال
عندما أكتب هذا:
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
'س *
تتوقع الطريقة رؤية نوع رقمي آخر.
لا تنتمي إلى StackOverflow