On Wed, Aug 13, 2008 at 6:59 PM, Ryan Davis <ryand-ruby / zenspider.com> wrote:
> I agree that your second example doesn't feel right... I prefer altering
> your original example:
>
> case amount
> when 25..50:  42
> when 51..66:  78
> when 90..123: 99
> else amount < 25 ? 100 : 200
> end

Don't use this; it's just for fun...

my_number = 57
begin
  [25, 51, 67, 90, 123].zip([100, 42, 78, 0, 99]).select {|a| a[1] if
my_number < a[0]}.first[1] rescue 200
end

Two things.

1. It's generally not good form to use a rescue for program logic

2. I'm surprised that no one saw the fundamental problem in using
ranges.  We're looking at a line that has divisions, not pieces that
may or may not overlap.  I suppose if you were clever, you could make
it work and have it behave almost the way you want it to.

I'd go with dividers instead of ranges.  You could build your ranges
automagically with a list of the divisions, I suppose.

Even though at first glance it seems verbose, I do like Ara's
solution.  And Ryan Davis' crack is really simple and succinct.  Like
them both!

Todd