From: hal9000 / hypermetrics.com Subject: [ruby-talk:5114] Types and === Date: Tue, 26 Sep 2000 08:40:01 +0900 > Reason with me: Normally when x == y, x === y is also true (I'm > not saying the converse!!). But I have found a case where it isn't. > I can see there may be others.) > > See the fragment below, and its output. > > classify1 and classify2 don't do the same thing. The first fails; > the second works. classify3 also works. ahm... I might be missing something. You said '*Normally* when x == y, ...', and also you said you know '==' is not '===' but assuming Module#=== is equal to Module#== ? try this: o = Object.new p (Object === o) p (Object == o) "Object === o" is equal to "o.is_a? Object". that makes easier to write case statement. def classify4(arg) case arg when String print " arg is a string\n" when Array print " arg is an array\n" when Hash print " arg is a hash\n" else print " arg is unknown\n" end end -- yashi