Project

General

Profile

Bug #13312

Updated by stomar (Marcus Stollsteimer) about 7 years ago

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.

Back