From: Simon Krahnke Date: 2009-10-23T03:35:09+09:00 Subject: Re: Tip du jour: no need to chomp before to_i * Robert Klemme (2009-10-20) schrieb: > On 20.10.2009 00:49, Simon Krahnke wrote: >> * Robert Klemme (2009-10-13) schrieb: >> >>> Basically Integer applies the same semantics as the Ruby parser while >>> #to_i just grabs the first sequence of digits, treats it as a decimal >>> number and turns it into an int. If there is no such sequence it falls >>> back to 0. >> >> A little correction: to_i is passed the radix, which by default is 10. > > Thanks for correcting me! > >> It will return zero if the first character is not the set of digits for >> that radix, otherwise it will turn the run of digits at the front of the >> string into an integer according to the radix. > > You meant to say "the first _non whitespace_ character". :-) True. Whitespace at the start of the string seems to be ignored, but is a stopper everywhere else. It was complicated enough the way I wrote it. I looked for the ri documentation on to_i, but all the standard library ri docs seem to be gone on my computer, strange. I suppose the code is like this, only better: def to_i radix=10 s = 0 s += 1 while self[s,1] == "\s" (s...length).inject(0) | val, i | d = self[i,1] # wah! next val if d == '_' digit = radix_digit(d, radix) break val if digit < 0 val *= radix val += digit end end mfg, simon .... l