From 181f7b97d6b5ac76d64e5457f28916b92aada619 Mon Sep 17 00:00:00 2001 From: KOBAYASHI Shuji Date: Sat, 9 May 2020 15:27:42 +0900 Subject: 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} ``` --- mrblib/hash.rb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/mrblib/hash.rb b/mrblib/hash.rb index b49e987c7..7d64addd7 100644 --- a/mrblib/hash.rb +++ b/mrblib/hash.rb @@ -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" + self[k]._inspect(recur_list)) + ary<<(keys[i]._inspect(recur_list) + "=>" + vals[i]._inspect(recur_list)) i+=1 end "{"+ary.join(", ")+"}" -- cgit v1.2.3