Fix some Hash methods are inconsistent with values

Inconsistent when hash has duplicate key.

### Example

  ```ruby
  # example.rb
  keys = (1..3).map{[_1]}
  h = keys.to_h{[_1, _1[0]]}
  keys[0][0] = 2
  p h.values
  p h.each_value.to_a
  p h
  ```

#### Before this patch:

  ```console
  $ bin/mruby example.rb
  [1, 2, 3]
  [1, 1, 3]
  {[2]=>1, [2]=>1, [3]=>3}
  ```

#### After this patch (same as Ruby)

  ```console
  $ bin/mruby example.rb
  [1, 2, 3]
  [1, 2, 3]
  {[2]=>1, [2]=>2, [3]=>3}
  ```
This commit is contained in:
KOBAYASHI Shuji
2020-05-09 15:27:42 +09:00
parent 3491372a1d
commit 181f7b97d6
+3 -3
View File
@@ -140,7 +140,7 @@ class Hash
def each_value(&block)
return to_enum :each_value unless block
self.keys.each{|k| block.call(self[k])}
self.values.each{|v| block.call(v)}
self
end
@@ -192,11 +192,11 @@ class Hash
recur_list[self.object_id] = true
ary=[]
keys=self.keys
vals=self.values
size=keys.size
i=0
while i<size
k=keys[i]
ary<<(k._inspect(recur_list) + "=>" + self[k]._inspect(recur_list))
ary<<(keys[i]._inspect(recur_list) + "=>" + vals[i]._inspect(recur_list))
i+=1
end
"{"+ary.join(", ")+"}"