From: ruby-core@... Date: 2015-06-06T03:06:44+00:00 Subject: [ruby-core:69477] [Ruby trunk - Bug #11228] Classes Cannot be used in case Statements Issue #11228 has been updated by Marc-Andre Lafortune. PS: The definition of `Class#===` allows you to write case "A String instance" when String puts "flaw_demo: This is, where the control flow should be." when Regexp puts "flaw_demo: Hi Regexp!" else puts "flaw_demo: The control flow should not reach this line." end # case # => flaw_demo: This is, where the control flow should be. ---------------------------------------- Bug #11228: Classes Cannot be used in case Statements https://bugs.ruby-lang.org/issues/11228#change-52778 * Author: Martin Vahi * Status: Rejected * Priority: Normal * Assignee: * ruby -v: ruby 2.2.2p95 (2015-04-13 revision 50295) [x86_64-linux] * Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN, 2.2: UNKNOWN ---------------------------------------- ~~~ #!/usr/bin/env ruby def flaw_demo cl_selector="A String instance".class case cl_selector when String puts "flaw_demo: This is, where the control flow should be." when Regexp puts "flaw_demo: Hi Regexp!" else puts "flaw_demo: The control flow should not reach this line." end # case end ; flaw_demo() CONST_1=42 CONST_2=99 def works_ok i_selector=42 case i_selector when CONST_1 puts " works_ok: This is, where the control flow should be." when CONST_2 puts " works_ok: Hi CONST_2!" else puts " works_ok: The control flow should not reach this line." end # case end ; works_ok() # Console output: # flaw_demo: The control flow should not reach this line. # works_ok: This is, where the control flow should be. ~~~ ---Files-------------------------------- test_case.rb (798 Bytes) -- https://bugs.ruby-lang.org/