From: Eric Will Date: 2009-04-08T00:10:22+09:00 Subject: barenames and case statements 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| case klass when String puts "String!" when Array puts "Array!" when Hash puts "Hash!" else puts "I don't know: #{klass}" end 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| case klass.to_s when "String" puts "String!" when "Array" puts "Array!" when "Hash" puts "Hash!" else puts "I don't know: #{klass}" end 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