2012-01-07 11 views
12

मैं बस रुबी की कोशिश कर रहा था और मैं String#to_i पर आया था। मान लीजिए मैं इस कोड है:रूबी की स्ट्रिंग # to_i कभी-कभी 0 को वापस क्यों करती है जब स्ट्रिंग में कोई संख्या होती है?

var1 = '6 sldasdhkjas' 
var2 = 'aljdfldjlfjldsfjl 6' 

क्यों puts var1.to_i उत्पादन 6 जब puts var2.to_i0 देता है?

उत्तर

28

to_i विधि स्ट्रिंग के की शुरुआत में सभी पारदर्शी अंकों द्वारा बनाई गई संख्या देता है। आपकी पहली स्ट्रिंग अंक के साथ शुरू होती है, इसलिए to_i देता है कि दूसरी स्ट्रिंग अंक से शुरू नहीं होती है, इसलिए 0 वापस आ जाता है। Btw, खाली स्थान के नजरअंदाज कर दिया है, इसलिए " 123abc".to_i रिटर्न 123.

+1

तो इसका मतलब है कि अगर शुरुआत में गैर-पूर्णांक चरित्र है स्ट्रिंग, to_i बाकी स्ट्रिंग को अनदेखा कर देगा? – hsinxh

+1

बिल्कुल, यदि स्ट्रिंग एक गैर-पूर्णांक चरित्र से शुरू होती है तो यह तुरंत पार्सिंग बंद कर देती है और 0 को वापस लौटाती है, जो स्ट्रिंग में बाद में आने वाली किसी भी संख्या को अनदेखा कर सकती है। – DarkDust

+2

यह पूरी तरह से सच नहीं है - यह व्हाइटस्पेस वर्णों के माध्यम से विश्लेषण करेगा। "123" .to_i 123 के मूल्यांकन करेगा, जैसा कि एक टैब से शुरू होने वाली स्ट्रिंग होगी। –

4

to_i का अधिक विस्तृत उदाहरण एक पूर्णांक के रूप में str में अग्रणी पात्रों की व्याख्या का परिणाम देता है :

irb(main):013:0* "a".to_i 
=> 0 
irb(main):014:0> "".to_i 
=> 0 
irb(main):015:0> nil.to_i 
=> 0 
irb(main):016:0> "2014".to_i 
=> 2014 
irb(main):017:0> "abc2014".to_i 
=> 0 
irb(main):018:0> "2014abc".to_i 
=> 2014 
irb(main):019:0> " 2014abc".to_i 
=> 2014 
संबंधित मुद्दे