2008-11-19 11 views
7

रूबी में हमारे पास 'बैंग' विधि capitalize! है जिसमें स्ट्रिंग में कोई बदलाव नहीं होने पर nil लौटने का अजीब व्यवहार है।रुबी 'पूंजीकरण!' विरोधाभास

इसका मतलब है कि मैं इस आदेश को अन्य के साथ नहीं ले सकता क्योंकि यह nil लौटाता है तो प्रभावी ढंग से श्रृंखला को नष्ट कर देता है।

fname = fullname[0...fullname.index(' ')].capitalize! 

जो एक तार से पहला नाम निकालता है और यह रूप में अच्छी तरह भुनाने चाहिए:

क्या im करने का प्रयास कर कुछ इस तरह है। लेकिन अगर यह fname में संग्रहीत स्ट्रिंग पहले से ही पूंजीकृत है nil है।

पाठ्यक्रमों में से मैं एक और कथन जोड़ सकता हूं लेकिन यह सोच रहा था कि "श्रृंखला को तोड़ने के बिना" ऐसा करने का कोई तरीका है या नहीं।

उत्तर

17

.capitalize (बैंग के बिना) का उपयोग करें - जब तक आपको वास्तव में स्रोत को बदलने की आवश्यकता न हो।

+0

omg ... मुझे विश्वास नहीं है कि मुझे यह एहसास नहीं हुआ :(tnx dude –

+0

इसे सुनने में बहुत खुशी हुई। :) – HanClinto

+0

@HanClinto क्या होगा यदि आपको वैरिएबल की जरूरत है और पूंजीकरण (के माध्यम से!) कर सकते हैं लेकिन कर सकते हैं गारंटी नहीं है कि उपयोगकर्ता लोअरकेस में इनपुट करेगा? क्या किसी अन्य विधि को चेन किए बिना ऐसा करने का कोई तरीका है? – FluxEngine

7

के बाद से अपने बयान पूरा नाम का मान नहीं बदलता है, बस करो:

fname = fullname[0...fullname.index(' ')].capitalize 

कौन सा नहीं के बराबर है, तो कोई परिवर्तन नहीं किया गया है वापस नहीं करता है।