Project

General

Profile

Actions

Bug #13312

closed

String#casecmp raises TypeError instead of returning nil

Added by stomar (Marcus Stollsteimer) about 7 years ago. Updated over 6 years ago.

Status:
Closed
Target version:
-
[ruby-core:80145]

Description

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:

"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) patch.diff shingo (shingo morita), 03/29/2017 09:57 AM
Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0Like0Like0Like0