From: jzakiya@... (Jabari Zakiya) Date: 2003-09-05T12:48:41+09:00 Subject: Re: Difference between .. and ... in boolean ranges Oliver Dain wrote in message news:... > I'm a bit confused by some Ruby behavior I'm seeing with ranges. As I > understand it the difference between > > 0..5 > > and > > 0...5 > > is that the former includes the number 5 while the 2nd does not. That > seems to be the case, but one would expect the same type of behavior > in boolean context. For example, I'd think > > 0.upto(9) do |x| > if (x==3)..(x==5) > puts "In the range: #{x}" > else > puts "Not in the range: #{x}" > end > end > > Would output: > > Not in the range: 0 > Not in the range: 1 > Not in the range: 2 > In the range: 3 > In the range: 4 > In the range: 5 > Not in the range: 6 > Not in the range: 7 > Not in the range: 8 > Not in the range: 9 > > while using the 3 dot form like this: > > 0.upto(9) do |x| > if (x==3)...(x==5) > puts "In the range: #{x}" > else > puts "Not in the range: #{x}" > end > end > > Would output: > > Not in the range: 0 > Not in the range: 1 > Not in the range: 2 > In the range: 3 > In the range: 4 > Not in the range: 5 > Not in the range: 6 > Not in the range: 7 > Not in the range: 8 > Not in the range: 9 > > However, the 3 dot form doesn't work as expected. It outputs the same > as the 2 dot form (which works as expected). What gives? This seems > unintuitive to me. Any thoughts? > > Thanks, > Oliver ----------------------------------------------------------------- change: if (x==3)..(x==5) and (x==3)...(x==5) to: if (3..5).include?(x) or (3...5).include?(x) or: if (3..5).include? x or (3...5).include? x for second case, you get output: "Not in the range: 5" Jabari Zakiya