Because the === operator of the Class class (used in case statements) checks for 'is an instance of'. So, the following: > case klass > when String > puts "String!" > end is to be interpreted as String===klass, that is to, klass.is_a?(String), which is false. But the following is true: case klass when Class puts 'It's a class of course' end Hope it helps blambeau On Tue, Apr 7, 2009 at 5:10 PM, Eric Will <rakaur / malkier.net> wrote: > I've encountered this in the past and thought I was messing something > up, but it's happening still. > > Can anyone tell me why this: > > puts "ruby-#{RUBY_VERSION} [#{RUBY_PLATFORM}]" > > [String, Array, Hash].each do |klass| > ¨Âáóëìáó> ¨ÂèåÓôòéîç > ¨Âõô¢Óôòéîç¡> ¨ÂèåÁòòá> ¨Âõô¢Áòòáù¡¢ > ¨ÂèåÈáóè > ¨Âõô¢Èáóè¡> ¨Âìó> ¨Âõô¢É äïî§ëîï÷£ûëìáóóý> ¨Âîä > end > > Produces this: > > ruby-1.8.7 [x86_64-linux] > I don't know: String > I don't know: Array > I don't know: Hash > > ruby-1.9.1 [x86_64-linux] > I don't know: String > I don't know: Array > I don't know: Hash > > Am I missing something here? In order to get the expected result I > have to do this: > > [String, Array, Hash].each do |klass| > ¨Âáóëìáóó®ôïßó > ¨Âèå¢Óôòéîç¢ > ¨Âõô¢Óôòéîç¡> ¨Âèå¢Áòòáù> ¨Âõô¢Áòòáù¡¢ > ¨Âèå¢Èáóè¢ > ¨Âõô¢Èáóè¡> ¨Âìó> ¨Âõô¢É äïî§ëîï÷£ûëìáóóý> ¨Âîä > end > > This works of course, but why doesn't the former? I find it hard to > believe this has been overlooked. What am I missing? > > -- Eric Will > >