2010-12-06 11 views
7

यह काम करता हैसमस्या

irb(main):001:0> name = "Rohit " "Sharma" 
=> "Rohit Sharma" 

लेकिन यह नहीं

irb(main):001:0> fname = "Rohit " 
=> "Rohit " 
irb(main):002:0> lname = "Sharma" 
=> "Sharma" 
irb(main):003:0> name = fname lname 

करता है यह इस त्रुटि

NoMethodError: undefined method `fname' for main:Object 
from (irb):3 

देता है कुछ सुझाव प्रदान करें। अग्रिम धन्यवाद।

अद्यतन

जवाब मैं एक blog post लिखा है प्राप्त करने के बाद। कृपया यह देखें।

उत्तर

4

त्रुटि इस तथ्य से संबंधित है कि fname के लिए काम करने के लिए एक कार्य होना होगा। इसके बजाय,

name = fname + lname 

या यहाँ तक कि

name = "#{fname}#{lname}" 

कोशिश लेकिन जहां

name = "Rohit " "Sharma" 

था यह, एक विशेष मामला है के बाद से रूबी स्वचालित रूप से दो तार में शामिल हो जाएगा।

+0

या 'नाम = fname << lname' कर सकते हैं। –

+1

@ जोनास: लेकिन यह 'fname' को संशोधित करता है, जो शायद ओपी चाहता है ... – Peter

+0

हाँ, यह quirk है। हालांकि यह तेज है। –

0

बस

name = fname + lname 

string + string की तरह उन्हें inbetween एक + डाल दो आदानों एक साथ concatenated वाली एक नई स्ट्रिंग वापस जाने के लिए परिभाषित किया गया है।

2

जब आप

name = "Rohit " "Sharma" 

कर आप दो String रों वस्तुओं है कि तब एक स्ट्रिंग बनाने के लिए एक साथ मर्ज न बनाएं। इसके बजाए, रूबी (दुभाषिया/कंपाइलर/जो कुछ भी) कोड को देखता है, और एक String ऑब्जेक्ट बनाने से पहले इसे एक साथ विलय करता है। यदि आप quirks पता

तो तुम

name = "Rohit " "Sharma" 

नहीं बल्कि

first_name_plus_space = "Rohit " 
last_name = "Sharma" 
name = first_name_plus_space last_name