Newbie, questions about === expression


I’m learning ruby this days.
And I followed this docs: Programming Ruby: The Pragmatic Programmer's Guide

Now, I have some questions about === expression

irb(main):138:0> case 1
irb(main):139:1> when 1…10 then ‘in’
irb(main):140:1> else ‘not in’
irb(main):141:1> end

obviously, the result is ‘in’

In the docs, there are an explanation:
*case operates by comparing the target (the expression after the keyword
case) with each of the comparison expressions after the when keywords.
test is done using comparison === target. As long as a class defines
meaningful semantics for === (and all the built-in classes do), objects
that class can be used in case expressions. *

But, when I type this, why throw an error ?

irb(main):149:0> 1…10 === 1
ArgumentError: bad value for range
from (irb):149
from /opt/ruby-1.9.3/bin/irb:12:in `’


Oh, Maybe I found the reason:

irb(main):195:0> (1…10) === 1
=> true

2012/10/27 月忧茗 [email protected]

On Saturday 27 October 2012 月忧茗 wrote

irb(main):139:1> when 1…10 then ‘in’
that class can be used in case expressions. *


You need to put parentheses around the range:

(1…10) === 1

otherwise ruby understands the expression as if it were
1…(10 === 1)

that is, as


which, of course, is not a valid range.

I hope this helps