Issue #9882 has been updated by Heesob Park.


This issue is due to the different result of String#hash of each string.

Why `slice_url.hash != str.hash` in splite of `slice_url == str` ? 

And I found the root cause is `slice_url.ascii_only? != str.ascii_only?`


~~~
C:\work>irb
irb(main):001:0> context = "Marriott International World’s Most ADMIRED Lodging
 Company by FORTUNE for 14th yr. via @FortuneMagazine http://cnnmon.ie/1kcFZSQ"
=> "Marriott International World’s Most ADMIRED Lodging Company by FORTUNE for
14th yr. via @FortuneMagazine http://cnnmon.ie/1kcFZSQ"
irb(main):002:0> slice_url = context.slice(105,24)
=> "http://cnnmon.ie/1kcFZSQ"
irb(main):003:0> str = "http://cnnmon.ie/1kcFZSQ"
=> "http://cnnmon.ie/1kcFZSQ"
irb(main):004:0> slice_url.hash
=> 1022346954
irb(main):005:0> str.hash
=> 1022346949
irb(main):006:0> slice_url.ascii_only?
=> false
irb(main):007:0> str.ascii_only?
=> true
~~~

----------------------------------------
Bug #9882: Issue with hash string keys
https://bugs.ruby-lang.org/issues/9882#change-46966

* Author: Tim Oommen
* Status: Open
* Priority: Normal
* Assignee: 
* Category: core
* Target version: 
* ruby -v: 2.1.1p76
* Backport: 2.0.0: REQUIRED, 2.1: REQUIRED
----------------------------------------
I have the following code. In a nutshell i am slicing a string to pull out strings to use as keys in a hash. However when running the following code, I am getting odd results.

~~~ruby
context = "Marriott International World’s Most ADMIRED Lodging Company by FORTUNE for 14th yr. via @FortuneMagazine http://cnnmon.ie/1kcFZSQ"
slice_url = context.slice(105,24)
str = "http://cnnmon.ie/1kcFZSQ"
slice_url == str
redirects = {"http://cnnmon.ie/1kcFZSQ"=>"http://money.cnn.com/2014/02/06/leadership/marriott-hotels.pr.fortune"}
redirects.key?(slice_url)
redirects.key?(str)
~~~

The `slice_url` and `str` are equal, however when I look for the key in redirects with `slice_url` I get a `nil`, but when setting the string variablemanually, I get a match and value.  I am not sure if this is an issue withthe value returned by the string slice method or an issue with the hash. 



-- 
https://bugs.ruby-lang.org/