From: morita.shingo@... Date: 2017-03-29T10:11:32+00:00 Subject: [ruby-core:80477] [Ruby trunk Bug#13312] String#casecmp raises TypeError instead of returning nil Issue #13312 has been updated by shingo (shingo morita). File patch.diff added I agree this is not expecting behavior. then I made a patch for this. Added test codes below. ```diff diff --git a/test/ruby/test_string.rb b/test/ruby/test_string.rb index 7dbf27e..96b37fd 100644 --- a/test/ruby/test_string.rb +++ b/test/ruby/test_string.rb @@ -2318,6 +2318,8 @@ def test_compare_different_encoding_string def test_casecmp assert_equal(1, "\u3042B".casecmp("\u3042a")) + assert_nil("Foo".casecmp(:Foo)) + assert_nil("1".casecmp(1)) end def test_casecmp? @@ -2325,6 +2327,8 @@ def test_casecmp? assert_equal(false, 'FoO'.casecmp?('BaR')) assert_equal(false, 'baR'.casecmp?('FoO')) assert_equal(true, '������'.casecmp?('������')) + assert_nil("Foo".casecmp?(:Foo)) + assert_nil("1".casecmp?(1)) end ``` ---------------------------------------- Bug #13312: String#casecmp raises TypeError instead of returning nil https://bugs.ruby-lang.org/issues/13312#change-63972 * Author: stomar (Marcus Stollsteimer) * Status: Open * Priority: Normal * Assignee: * 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: