Logan Capaldo
3/1/2006 3:57:00 AM
On Feb 28, 2006, at 11:59 AM, James Edward Gray II wrote:
> On Feb 28, 2006, at 10:53 AM, Jeffrey Schwab wrote:
>
>> James Edward Gray II wrote:
>>
>>> def commify( number )
>>> number.to_s.reverse.gsub!(/(\d\d\d)(?=\d)(?!\d*\.)/,
>>> '\1,').reverse
>>> end
>>
>> That's nice, except that gsub! returns nil if no substitutions are
>> performed, e.g. if the number has fewer than 4 digits. This can
>> result in an exception like:
>>
>> main.rb:3:in `commify':
>> undefined method `reverse' for nil:NilClass(NoMethodError)
>>
>> Of course, you could just break the chain across multiple lines:
>>
>> def commify(number)
>> s = number.to_s
>> s.reverse!
>> s.gsub!(/(\d\d\d)(?=\d)(?!\d*\.)/, '\1,')
>> s.reverse!
>> end
>
> Good catch. I originally had it in multiple lines and I forgot to
> remove the ! when I shortened it for this post.
>
> Thanks.
>
> James Edward Gray II
>
>
I don't know why but using regexps to do this kind of scares me.
Maybe its cause I don't have as much regexp fu but it just seems like
ruby
ruby
perl
ruby
ruby
Not that I have anything against perl or regexps, but that particular
regexp seems to scream "I'm doing this with a regexp not because it's
easier but because it's faster and shorter." Not that that's wrong.
Hmm I seem to be trying really hard not to offend anyone :-p. I guess
a rule of thumb for me is more than 1 lookahead assertion and my eyes
glaze over ;)