summaryrefslogtreecommitdiffhomepage
path: root/mrblib
diff options
context:
space:
mode:
authorKOBAYASHI Shuji <[email protected]>2020-05-09 15:27:42 +0900
committerKOBAYASHI Shuji <[email protected]>2020-05-09 15:27:42 +0900
commit181f7b97d6b5ac76d64e5457f28916b92aada619 (patch)
treecc46954707c28a5baacce3d1f64551fd230cf615 /mrblib
parent3491372a1d9e4fde2551442cf0aeb1ffae888547 (diff)
downloadmruby-181f7b97d6b5ac76d64e5457f28916b92aada619.tar.gz
mruby-181f7b97d6b5ac76d64e5457f28916b92aada619.zip
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} ```
Diffstat (limited to 'mrblib')
-rw-r--r--mrblib/hash.rb6
1 files 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<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(", ")+"}"