जब मैं इस टाइप करें:क्यों रूबी में `3 *" दोहराना "` 3 * 'दोहराना नहीं है?
puts 'repeat' * 3
मैं:
>> repeat repeat repeat
लेकिन यह काम नहीं कर रहा है, तो मैं यह कर:
puts 3 * 'repeat'
क्यों?
जब मैं इस टाइप करें:क्यों रूबी में `3 *" दोहराना "` 3 * 'दोहराना नहीं है?
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"
करते हैं, यह एक String
तर्क के साथ Fixnum
पर *
लागू है। यह काम नहीं करता है, क्योंकि Fixnum
की *
विधि एक और संख्यात्मक प्रकार देखने की अपेक्षा करती है।
वास्तव में ... शानदार जवाब ... अच्छी तरह से किया। – RubyDubee
यह एक रिसाव अमूर्त है। http://www.joelonsoftware.com/articles/LeakyAbstractions.html – Levi
मैं तर्क दूंगा कि यह एक रिसाव अबास्ट्रक्शन नहीं है, यह मानने का कोई कारण नहीं है कि * स्ट्रिंग और फिक्सम के लिए कम्यूटिव है। –