From: eregontp@... Date: 2017-05-25T09:04:03+00:00 Subject: [ruby-core:81377] [Ruby trunk Bug#13312] String#casecmp raises TypeError instead of returning nil Issue #13312 has been updated by Eregon (Benoit Daloze). stomar (Marcus Stollsteimer) wrote: > 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). Thanks, r58839 looks great. In case of backport we can adjust the version guard, but only after a release of 2.x as we need to test against releases in ruby/spec Travis and locally. ---------------------------------------- Bug #13312: String#casecmp raises TypeError instead of returning nil https://bugs.ruby-lang.org/issues/13312#change-65083 * 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: