Issue #13312 has been updated by stomar (Marcus Stollsteimer). I did not include the type check in `str_casecmp`, which seems superfluous to me. I also adjusted the tests, docs, and examples to those of the corresponding Symbol methods, and fixed the code formatting. @hsbt I also added a NEWS entry and updated the specs with a version guard for 2.5 (I do not know how this would be handled in case the change should be backported). ---------------------------------------- Bug #13312: String#casecmp raises TypeError instead of returning nil https://bugs.ruby-lang.org/issues/13312#change-65009 * Author: stomar (Marcus Stollsteimer) * Status: Closed * Priority: Normal * Assignee: stomar (Marcus Stollsteimer) * Target version: * ruby -v: r57964 * Backport: 2.2: UNKNOWN, 2.3: UNKNOWN, 2.4: UNKNOWN ---------------------------------------- String#casecmp and String#casecmp? behave differently from other comparison methods: for incomparable values they raise a TypeError, while Symbol#{casecmp,casecmp?} and the #<=> methods (also for other classes) return `nil`: ``` ruby "abc" <=> 1 # => nil "abc".casecmp 1 # TypeError: no implicit conversion of Integer into String "abc".casecmp? 1 # TypeError: no implicit conversion of Integer into String :abc <=> 1 # => nil :abc.casecmp 1 # => nil :abc.casecmp? 1 # => nil 1 <=> Time.now # => nil [] <=> :foo # => nil ``` This is surprising, since String#casecmp is essentially a case-insensitive version of String#<=>, which seems to imply that they should behave in a similar way. Also, the different behavior for String and Symbol might be an indication that this is a bug and not intentional. ---Files-------------------------------- patch.diff (2.5 KB) -- https://bugs.ruby-lang.org/ Unsubscribe: <mailto:ruby-core-request / ruby-lang.org?subject=unsubscribe> <http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>